Java教程是针对JDK 8编写的。本页面中描述的示例和实践不利用后续版本引入的改进,并且可能使用已不再可用的技术。
请参阅Java语言更改了解Java SE 9及后续版本中更新的语言功能的摘要。
请参阅JDK发行说明了解所有JDK版本的新功能、增强功能以及已删除或不推荐使用的选项的信息。
Character
类封装了char
数据类型。对于J2SE 5版本,Character
类添加了许多方法来支持补充字符。该API分为两类:一类是在char
和代码点值之间进行转换的方法,另一类是验证或映射代码点的方法。
本节描述了Character
类中一部分可用方法。完整的可用API列表,请参见Character
类的规范。
下表列出了Character
类中最有用的转换方法或促进转换的方法。codePointAt
和codePointBefore
方法包含在此列表中,因为文本通常以序列的形式存在,比如一个String
,这些方法可以用于提取所需的子字符串。
方法 | 描述 |
---|---|
toChars(int codePoint, char[] dst, int dstIndex) toChars(int codePoint) |
将指定的Unicode代码点转换为其UTF-16表示,并将其放入一个char 数组中。示例用法:Character.toChars(0x10400) |
toCodePoint(char high, char low) |
将指定的代理对转换为其补充代码点值。 |
codePointAt(char[] a, int index) codePointAt(char[] a, int index, int limit) codePointAt(CharSequence seq, int index) |
返回指定索引处的Unicode代码点。第三个方法接受一个CharSequence ,第二个方法对索引强制实施一个上限。 |
codePointBefore(char[] a, int index) codePointBefore(char[] a, int index, int start) codePointBefore(CharSequence seq, int index) codePointBefore(char[], int, int) |
返回指定索引前面的Unicode代码点。第三个方法接受一个CharSequence ,其他方法接受一个char 数组。第二个方法对索引强制实施一个下限。 |
charCount(int codePoint) |
对于可以由一个char 表示的字符,返回值为1。对于需要两个char 表示的补充字符,返回值为2。 |
之前使用char
原始数据类型的一些方法,比如isLowerCase(char)
和isDigit(char)
,已被支持补充字符的方法所取代,如isLowerCase(int)
和isDigit(int)
。之前的方法仍然可以使用,但不适用于补充字符。为了创建一个全球应用并确保您的代码与任何语言无缝配合,建议使用这些方法的新形式。
请注意,出于性能原因,大多数接受码点的方法不会验证码点参数的有效性。您可以使用isValidCodePoint
方法进行验证。
下表列出了字符类中的一些验证和映射方法。
isValidCodePoint(int codePoint)
isSupplementaryCodePoint(int codePoint)
isHighSurrogate(char)
char
isLowSurrogate(char)
char
isSurrogatePair(char high, char low)
codePointCount(CharSequence, int, int)
codePointCount(char[], int, int)
CharSequence
char
isLowerCase(int)
isUpperCase(int)
isDefined(int)
isJavaIdentifierStart(char)
isJavaIdentifierStart(int)
isLetter(int)
isDigit(int)
isLetterOrDigit(int)
getDirectionality(int)
Character.UnicodeBlock.of(int codePoint)
null
String
、StringBuffer
和StringBuilder
类也有构造函数和方法可用于处理补充字符。下表列出了一些常用的方法。有关可用API的完整列表,请参阅String
、StringBuffer
和StringBuilder
类的javadoc。
String(int[] codePoints, int offset, int count)
String
String.codePointAt(int index)
StringBuffer.codePointAt(int index)
StringBuilder.codePointAt(int index)
String.codePointBefore(int index)
StringBuffer.codePointBefore(int index)
StringBuilder.codePointBefore(int index)
String.codePointCount(int beginIndex, int endIndex)
StringBuffer.codePointCount(int beginIndex, int endIndex)
StringBuilder.codePointCount(int beginIndex, int endIndex)
StringBuffer.appendCodePoint(int codePoint)
StringBuilder.appendCodePoint(int codePoint)
String.offsetByCodePoints(int index, int codePointOffset)
StringBuffer.offsetByCodePoints(int index, int codePointOffset)
StringBuilder.offsetByCodePoints(int index, int codePointOffset)