这些Java教程是为JDK 8编写的。本页面中描述的示例和实践不利用后续版本中引入的改进,可能使用不再可用的技术。
有关Java SE 9及其后续版本中更新的语言功能的摘要,请参阅Java语言更改。
有关所有JDK版本的新功能、增强功能和已删除或弃用选项的信息,请参阅JDK发行说明。
您可以根据字符的属性进行分类。例如,X是大写字母,4是十进制数字。检查字符属性是验证最终用户输入数据的常见方式。例如,如果您在线销售图书,订单输入屏幕应该验证数量字段中的字符是否都是数字。
不习惯编写全球化软件的开发人员可能会通过将其与字符常量进行比较来确定字符的属性。例如,他们可能会编写如下代码:
char ch;
//...
// 这段代码是错误的!
// 检查ch是否为字母
if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))
// ...
// 检查ch是否为数字
if (ch >= '0' && ch <= '9')
// ...
// 检查ch是否为空格
if ((ch == ' ') || (ch =='\n') || (ch == '\t'))
// ...
上述代码是错误的,因为它只适用于英语和少数其他语言。要国际化前面的示例,请将其替换为以下语句:
char ch;
// ...
// 这段代码是正确的!
if (Character.isLetter(ch))
// ...
if (Character.isDigit(ch))
// ...
if (Character.isSpaceChar(ch))
// ...
Character方法依赖于Unicode标准来确定字符的属性。Unicode是一种支持世界上主要语言的16位字符编码。在Java编程语言中,char值表示Unicode字符。如果您使用适当的Character方法检查char的属性,您的代码将适用于所有主要语言。例如,Character.isLetter方法在中文、德语、阿拉伯语或其他语言中,如果字符是字母,则返回true。
下面的列表列出了一些最有用的Character比较方法。在Character API文档中完整地指定了这些方法。
isDigitisLetterisLetterOrDigitisLowerCaseisUpperCaseisSpaceCharisDefinedCharacter.getType方法返回字符的Unicode类别。每个类别对应于Character类中定义的常量。例如,对于字符A,getType返回Character.UPPERCASE_LETTER常量。有关getType返回的类别常量的完整列表,请参阅Character API文档。以下示例显示了如何使用getType和Character类别常量。这些if语句中的所有表达式都为true:
if (Character.getType('a') == Character.LOWERCASE_LETTER)
// ...
if (Character.getType('R') == Character.UPPERCASE_LETTER)
// ...
if (Character.getType('>') == Character.MATH_SYMBOL)
// ...
if (Character.getType('_') == Character.CONNECTOR_PUNCTUATION)
// ...