文档

Java™ 教程-Java Tutorials 中文版
设计注意事项
Trail: Internationalization
Lesson: Working with Text
Section: 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() 方法时,高和低代理对被反转,导致错误和可能无效的代理对。

Previous page: Sample Usage
Next page: More Information