char.IsLetter的使用

先看一下下面的代码,大家会觉得控制台输出什么?

输出: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 |= ' '; 这个语句的用法了吧,它只把当前大写或者小写字母都转成小写字母

 

posted on 2016-11-09 15:15  愚公学编程  阅读(716)  评论(0编辑  收藏  举报