C# 3.0 Cookbook:二、字符与字符串处理(1):判断字符类型

问题: 

      一个char类型的变量,我们要得到其中包含的字符类型是字母、阿拉伯数字、标点符号、控制符号、分隔符、特殊符号、空格还是替代符(例如值大于64K的Unicode字符集)。同样,一个string类型的变量,我们要得到其中某一个字符或某几个字符的类型。

解决方案:

        要得到字符的类型,可以使用System.Char命名空间中的内置静态方法,具体如下:

Char.IsControl Char.IsDigit
Char.IsLetter Char.IsNumber
Char.IsPunctuation Char.IsSeparator
Char.IsSurrogate Char.IsSymbol
Char.IsWhitespace  

讨论:

    下面的例子描述了用怎样的方法可以返回一个字符的类型。首先,要创建一个几种字符类型的枚举类型:

public enum CharKind
{
Digit,
Letter,
Number,
Punctuation,
Unknown
}

    接下来,创建一个包含判断字符类型并且返回值为CharKind枚举类型的的扩展方法:

static class CharStrExtMethods
{
public static CharKind GetCharKind(this char theChar)
{
if (Char.IsLetter(theChar))
{
return CharKind.Letter;
}
else if (Char.IsNumber(theChar))
{
return CharKind.Number;
}
else if (Char.IsPunctuation(theChar))
{
return CharKind.Punctuation;
}
else
{
return CharKind.Unknown;
}
}
}

    GetCharKind扩展方法展示了使用多种内置静态方法测试字符类型的手段。所有不同的字符类型被定义在一个枚举类型并且由GetCharKind方法返回。

    假如无论怎样,一个字符串中的每个字符都要需要被测试其类型,可使用char结构的静态重载方法。接下来的代码修改了GetCharKind扩展方法,操作字符串变量接受

static class CharStrExtMethods
{
public static CharKind GetCharKindInString(this string theString,
int charPosition)
{
if (Char.IsLetter(theString, charPosition))
{
return CharKind.Letter;
}
else if (Char.IsNumber(theString, charPosition))
{
return CharKind.Number;
}
else if (Char.IsPunctuation(theString, charPosition))
{
return CharKind.Punctuation;
}
else
{
return CharKind.Unknown;
}
}
}

    接下来的代码段判断字符串中的第5个字符是否为数字。(charPosition参数从0开始计数)

string data = "abcdefg";
if (string.GetCharKindInString(4) == CharKind.Digit) {...} 

表2-1描述了char结构中的每一个静态方法:

表2-1:char结构方法

char 方法 描述
IsControl 是否属于在范围\U007F, \U0000至\U001F, 和\U0080至\U009F的控制字符代码。
IsDigit 是否属于在Unicode字符集中任意0到9的十进制数。
IsLetter 是否属于字母类别。
IsNumber 是否属于十进制数或十六进制数,包含上标文字和下标文字。
IsPunctuation 是否属于标点符号。
IsSeparator 是否属于分隔字符、分隔线或段落分隔符。
IsSurrogate 是否属于在范围\UD800至\UDFFF之间的代理项字符。
IsSymbol 是否属于任意的自述、货币、或其他符号类别,或其他修饰符。
IsWhitespace 是否属于以下空白类型字符:

\U0009
\U000A
\U000B
\U000C
\U000D
\U0085
\U2028
\U2029

    在.NET 2.0框架中,有少数额外的Is*类型的函数被添加进来以增强现有的方法,如果问题中的字符是一个字母(也就是IsLetter方法返回为true),可以用表2-2的方法再判断字母是否为大写还是小写。

表2-2:Char 结构的Uppercase 和 lowercase 方法

char 方法 描述
IsLower 字符是否为小写字母。
IsUpper 字符是否为大写字母。

    如果问题中的字符是代理项字符(也就是IsSurrogate方法返回为true),可以使用表2-3中的方法得到更多代理项字符的信息。

表2-3:Char 结构的Surrogate方法

char 方法 描述
IsHighSurrogate 范围在\UD800 至 \UDBFF之间的字符。
IsLowSurrogate 范围在\UDC00 至\UDFFF之间的字符。

  除以上的Surrogate方法以外,当一个代理字符项由两个字符组成时,IsSurrogatePair方法返回true,也就是说当一人字符为高位替代符,当另一个字符为低位替代符时。

  最后在这组方法中要补充说明的是IsLetterOrDigit方法,当问题中的字符为字母或数字时该方法返回true,当需要判断某个字符是否为字母或数字时,可以使用IsLetter 方法和IsDigit 方法。

还可参见

    MSDN中的“Char 结构”相关文档。

版权说明:作者:张颖希PocketZ's Blog
出处:http://www.cnblogs.com/PocketZ
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

本文翻译内容取自网络,纯粹是练习英文水平,如有雷同,纯属意外!有不妥之处,欢迎拍砖!

 

posted @ 2010-04-15 21:25  pocketz  阅读(1388)  评论(0编辑  收藏  举报