一、字符
在.NET中,字符采用16位Unicode编码,一个字符有一个System.Char结构(值类型)表示。它提供两个常数字段:MinValue(定义为0x0000)和MaxValue(定义为0xFFFF)。
给定一个char实例作为参数,我们可以调用char的静态方法GetUnicodeCategory返回一个System.Globalization.UnicodeCategory枚举值,可以根据该枚举值来判断字符的类型(是否是数字。是否是标点符号。。。。。。。。。)
代码
- namespace CharStudy
- {
- class Program
- {
- static void Main(string args)
- {
- Console.WriteLine( char.GetUnicodeCategory('c'));
- Console.WriteLine(char.GetUnicodeCategory('4'));
- Console.WriteLine(char.GetUnicodeCategory(','));
- Console.WriteLine(char.GetUnicodeCategory('A'));
- Console.WriteLine(char.GetUnicodeCategory('content#39;));
- }
- }
- }
上面代码的输出值为
char有一些静态方法,专门用于判断字符的类型,eg.IsDigit,IsLetter,IsUpper,IsLower这些方法在内部实现的时候都调用了GetUnicodeCategory,并简单的返回true或false,这些静态方法接受的参数或者为一个字符,或者为一个string和该string中的一个字符的索引。
代码
- namespace CharStudy
- {
- class Program
- {
- static void Main(string args)
- {
- Console.WriteLine(char.IsDigit('4'));//输出为true
- Console.WriteLine(char.IsDigit("heaiping",3));//输出为false
- Console.WriteLine(char.IsDigit('c'));//输出为false
- }
- }
- }
其他类似方法不再一一演示。
char还有一个静态方法GetNumericValue,返回一个字符对应的数值形式。
代码
- namespace CharStudy
- {
- class Program
- {
- static void Main(string args)
- {
- double d;
- d = char.GetNumericValue('\u0033');
- Console.WriteLine(d.ToString());//3
- d = char.GetNumericValue('\u00bc');
- Console.WriteLine(d.ToString());//0.25
- }
- }
- }
需要特殊说明的是ToUpper和ToLower,他们将字符床转换为相应的大写和小写形式。这些方法在做字符串转换时会调用到与线程相关的语言文化信息(System.Threading.Thread.CurrentCulture属性),或者可以用其重载函数直接传递以恶搞System.Globalization.CultrueInfo实例来指定文化信息,因为在不同的文化下大小写的方式是不一样的。
char类型提供的实力方法,Equal方法用于比较16位的unicode,CompareTo方法同样是根据unicode来比较的,这两种比较与语言文化没有关系。
.net提供了三种技巧用于数值和char实例之间的转换,分别为:
转型,效率最高,缺点是它要求我们的编译器要将期望转换的数值类型看作基元类型。
使用Convert类型,如果在转换过程中出现了数据丢失,将会抛出OverflowException
使用IConvertible接口,char类型和所有的数值类型均实现了该接口,但是在数值类型上面调用该方法会产生装箱操作,所以效率最低。
代码演示:
代码
- namespace CharStudy
- {
- class Program
- {
- static void Main(string args)
- {
- char c;
- int n;
- //使用转型
- c = (char)65;
- Console.WriteLine(c);//显示A
- n = (int)c;
- Console.WriteLine(n);//65
- //使用COnvert
- c = Convert.ToChar(n);
- Console.WriteLine(c);//A
- n = Convert.ToInt32(n);//65
- Console.WriteLine(n);
- //演示关于Convert对于超范围的检查
- try
- {
- c = Convert.ToChar(70000);//超出16位
- Console.WriteLine(c);
- }
- catch
- {
- Console.WriteLine("overflow");
- }
- //使用IConvertible
- c = ((IConvertible)65).ToChar(null);
- Console.WriteLine(c);//A
- n = ((IConvertible)c).ToInt32(null);
- Console.WriteLine(n);//64
- }
- }
- }
对于char的好多方法平时用的比较少,今天总算有个了解了