先看一下下面的代码,大家会觉得控制台输出什么?
输出:Chiantxt 。对吗?
因为你看到char.IsLetter这个方法的文字的注释是这样写的:
但实际上输出的结果是这样的:
???
怎么还输出“ィシ中国”这样的字符?
既然输入上面这几个字符,“☆”这个符号怎么又没有输出?
微软是怎么封装这个char.IsLetter方法的,用反编译工具看看:
哦,大概看明白了
如果char.IsLetter里面没有加这个方法,就不会输入“中国”这样的字符了
但是为什么呢?继续深入一步看看里面的方法
设个断点调试看看
原来微软把ィ定义成OtherLetter,然后返回个true;那么char.IsLetter这个方法检查这样的字符的时候,返回值就是true.也就知道了为什么“中国”这样的字符也被输出来了。
微软是这样定义OtherLetter的:
我也不是很明白这个定义的意思,我猜测,微软是除了ABC abc...等大小写字母,把其他各个国家的文字都定义成了字母,像韩国“안녕하세요”等等,都定义成OtherLetter。
那这样也就理解了“☆”这个符号怎么又没有输出了,因为这个不是哪个国家的文字。
在下面的语句中
CharUnicodeInfo.GetUnicodeCategory('☆')
得到的返回值是:OtherSymbol
只有符合下面条件,返回值才可以是true
猜测性的总结:char.IsLetter(char c) 这个方法:当 c 为 大小写字母或者是其他国家的文字,返回值为true
如果想在一个字符串中遍历输出大小写字母,可以使用下面这个方法:
只输出大写字母的方法:
public static bool IsLetter2(char c)
{
// c |= ' ';
return c >= 'A' && c <= 'Z';
}
只输出小写字母的方法
public static bool IsLetter2(char c)
{
// c |= ' ';
return c >= 'a' && c <= 'z';
}
这里大家也就知道了
c |= ' '; 这个语句的用法了吧,它只把当前大写或者小写字母都转成小写字母