我想获取输入int对应的Unicode字符。您可以假设输入
int
在 Java 中可以表示为 char
。
Character.toString( 65 )
A
Character.toString( codePoint )
你说:
我想获取输入int对应的unicode字符
String character = Character.toString( codePoint ) ;
查看这些示例 在 IdeOne.com 上实时运行:
System.out.println( Character.toString( 65 ) ) ; // "A"
A
String faceWithMedicalMask = Character.toString( 128_567 ) ; // "😷" = FACE WITH MEDICAL MASK.
System.out.println( FaceWithMedicalMask ) ;
😷
并非所有代码点都分配给编码字符。检查您输入的整数确实是有效的代码点。
int codePoint = 128_567 ;
String faceWithMedicalMask = null ;
if( Character.isValidCodePoint( codePoint ) ) {
faceWithMedicalMask = Character.toString( codePoint ) ;
} else {
… deal with invalid code point
}
char
和Character
类型你说:
您可以假设输入 int 在 java 中可以表示为 char。
不,你不能这么认为。
在 Unicode 中定义并受 Java 支持的 149,813 个字符中的大多数,不能用
char
类型表示。作为 16 位值,char
物理上无能力。
自 Java 2 以来,
char
类型已基本被破坏,并被 Java 5+ 中添加的 code point 支持所取代。
int
铸造为char
如果您违背我的建议,坚持使用
char
,那么您可以将 int
数字转换为 char
值。
char c = (char) 66 ;
System.out.println( c ) ;
B
注意: 这只适用于 0 到 65,535 范围内的代码点。大多数 Unicode 字符的代码点超出该范围,最多为 1,114,111。
0 到 65,535 的范围在 Unicode 中被称为 基本多语言平面 (BMP)。 Java提供了一个方法来测试这个范围,
Character.isBmpCodePoint(int codePoint)
。您可以在演员之前检查:
if( Character.isBmpCodePoint( codePoint ) ) {
char c = (char) 66 ;
} else {
… deal with input out of range
}
并非所有代码点都分配给编码字符。检查您输入的整数确实是有效的代码点。
if( Character.isBmpCodePoint( codePoint ) ) {
if( Character.isValidCodePoint( codePoint ) ) {
char c = (char) 66 ;
} else {
… deal with invalid code point
}
} else {
… deal with input out of range
}