给定Unicode代码点的编号,如何获取该字符的字符串或CharSequence对象 [英] Given the number of a Unicode code point, how can I obtain a String or CharSequence object for that character
问题描述
我看过有关在Java中获取Unicode字符的代码点编号的问题和答案。例如,问题How can I get a Unicode character's code?。
但我想要的正好相反:给定一个整数,如何获取分配给该code point数字的该字符的文本?
char
原始数据类型没有任何用处,仅限于Unicode字符集的Basic Multilingual Plane。该平面表示以Unicode定义的大约前64,000个字符。但Unicode已经增长到现在定义的超过11.3万个字符,几乎是这个数字的两倍。分配给字符的数字范围超过一百万。基于16-bits,char
限制在64K范围内,远远不够。
Character
和String
类都提供了codePointAt
方法来检查字符并返回表示Unicode中分配的代码点的int
。我在寻找相反的东西。
给定int
的➥,如何获取Character
、String
的对象或CharSequence
的某个实现,以便我可以加入到其他文本?
编写字符串文字时,可以使用带反斜杠-with-u的Unicode转义序列。但我感兴趣的是使用整数变量,软编码而不是硬编码Unicode字符。
推荐答案
tl;dr
String s = Character.toString( 128_567 ) ;
😷
详细信息
您请求的对象是Character
、String
或CharSequence
的某个实现。
Character
Character
类实际上是legacy,只是原始char
类型的对象包装器。char
类型也是遗留的,在内部定义为限制为Unicode代码点的前64K的16位数字。Unicode现在为字符分配了两倍多的代码点,因此char
无法表示大多数字符。因此我们不能为Basic Multilingual Plane字符集之外的字符实例化Character
对象。因此,作为一种解决办法,Character.toString( int )
会生成一个包含单个字符的String
。String
可以处理任何和所有Unicode字符,而Character
不能。
String
🡄Character.toString( int )
若要获取包含由int
确定的单个字符的String
对象,请将int
传递给Character.toString()
。
作为示例,我们使用FACE WITH MEDICAL MASK
,U+1F637处的表情符号(十进制:128,567)。
// -----| input |----------------
String input = "😷" ; // FACE WITH MEDICAL MASK at code point U+1F637 (decimal: 128,567).
int codePoint = input.codePointAt( 0 ) ; // Returns 128,567.
System.out.println( "codePoint : " + codePoint ) ;
码点:128567
将int
基元变量转换为String
。
// -----| String |----------------
String output = Character.toString( codePoint ) ; // Pass an `int` primitive integer number.
System.out.println( "output : " + output ) ;
输出:😷
或使用文字整数。
String output2 = Character.toString( 128_567 ) ; // Pass an integer literal.
System.out.println( "output2 : " + output2 ) ;
Output2:😷
请参阅此code run live at IdeOne.com。
CharSequence
上面的代码可以工作,因为String
是CharSequence
的实现。
CharSequence cs = Character.toString( 128_567 ) ; // Returns a `String` which is a `CharSequence`.
appendCodePoint
StringBuilder
类提供了一个方法appendCodePoint
,用于通过为其分配的Unicode代码点编号添加字符。Ditto用于线程安全StringBuffer
。
这篇关于给定Unicode代码点的编号,如何获取该字符的字符串或CharSequence对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!