本教程适用于JDK 8。本页面中描述的示例和实践不利用后续版本中引入的改进,并且可能使用不再可用的技术。
有关Java SE 9及后续版本中更新的语言特性的概述,请参阅Java语言更改。
有关所有JDK版本的新功能、增强功能和已删除或已弃用选项的信息,请参阅JDK发行说明。
本页包含一些代码片段,展示了一些常见的场景。
String
String newString(int codePoint) { return new String(Character.toChars(codePoint)); }
String
- 适用于BMP字符的优化Character.toChars
方法创建了一个临时数组,该数组仅使用一次后即被丢弃。如果这对性能产生了负面影响,可以使用以下适用于BMP字符(由单个char
值表示的字符)的优化方法。在该方法中,toChars
仅对辅助字符进行调用。
String newString(int codePoint) { if (Character.charCount(codePoint) == 1) { return String.valueOf(codePoint); } else { return new String(Character.toChars(codePoint)); } }
String
对象为了创建大量字符串,前一个代码片段的批量版本重用了toChars
方法使用的数组。该方法为每个码点创建一个单独的String
实例,适用于BMP字符。
String[] newStrings(int[] codePoints) { String[] result = new String[codePoints.length]; char[] codeUnits = new char[2]; for (int i = 0; i < codePoints.length; i++) { int count = Character.toChars(codePoints[i], codeUnits, 0); result[i] = new String(codeUnits, 0, count); } return result; }
格式化API支持辅助字符。以下示例是生成消息的简单方法。
// 推荐使用 System.out.printf("字符 %c 无效。%n", codePoint);
以下方法简单且避免了连接操作,这使得文本更难以本地化,因为并非所有语言都按照英语的顺序将数字值插入字符串。
// 不推荐使用 System.out.println("字符 " + String.valueOf(char) + " 无效。");