文档

Java™ 教程
隐藏目录
设计注意事项
路径:国际化
课程:文本处理
章节:Unicode

设计注意事项

为了编写适用于任何语言和脚本的代码,需要记住一些事情。

考虑因素 原因
避免使用char数据类型的方法。 避免使用char原始数据类型或使用char数据类型的方法,因为使用该数据类型的代码无法处理补充字符。对于接受char类型参数的方法,应该使用相应的int方法(如果有的话)。例如,使用Character.isDigit(int)方法而不是Character.isDigit(char)方法。
使用isValidCodePoint方法验证码点值。 码点被定义为int数据类型,允许超出0x0000到0x10FFFF有效码点范围的值。出于性能原因,接受码点值作为参数的方法不会检查参数的有效性,但是可以使用isValidCodePoint方法来检查值。
使用codePointCount方法计算字符数。 String.length()方法返回字符串中代码单元或16位char值的数量。如果字符串包含补充字符,则计数可能会误导,因为它不会反映真实的代码点数。要准确计算字符数(包括补充字符),请使用codePointCount方法。
使用String.toUpperCase(int codePoint)String.toLowerCase(int codePoint)方法而不是Character.toUpperCase(int codePoint)Character.toLowerCase(int codePoint)方法。 Character.toUpperCase(int)Character.toLowerCase(int)方法确实可以处理码点值,但是有一些字符无法进行一对一的转换。例如,德语的小写字符ß在转换为大写时会变成两个字符SS。同样,希腊小写Sigma字符在字符串中的位置不同而有所不同。Character.toUpperCase(int)Character.toLowerCase(int)方法无法处理这些情况;然而,String.toUpperCaseString.toLowerCase方法可以正确处理这些情况。
删除字符时要小心。 在调用StringBuilder.deleteCharAt(int index)StringBuffer.deleteCharAt(int index)方法删除索引指向补充字符的情况下,只会删除该字符的前半部分(第一个char值)。首先,在字符上调用Character.charCount方法以确定是否需要删除一个或两个char值。
翻转字符序列时要小心。 在对包含补充字符的文本调用StringBuffer.reverse()StringBuilder.reverse()方法时,高位和低位代理对会被颠倒,导致出现错误和可能无效的代理对。

上一页:示例用法
下一页:更多信息