0

我已经看到有关在 Java 中获取 Unicode 字符的代码点编号的问题和解答。例如,问题如何获得 Unicode 字符的代码?.

但我想要相反:给定一个整数,我如何获得分配给该代码点编号的那个字符的文本?

原始char数据类型没有用,仅限于 Unicode 字符集的基本多语言平面。该平面大约代表 Unicode 中定义的前 64,000 个字符。但是 Unicode 已经增长了近一倍,现在定义了超过 113,000 个字符。分配给字符的数字范围超过一百万。基于16-bits,achar被限制在 64K 的范围内,远远不够。

CharacterString类都提供了检查codePointAt字符并返回int表示以 Unicode 分配的代码点的方法。我正在寻找相反的东西。

➥ 给定一个int, 如何获得一个, 或一些实现的对象Character,然后我可以加入其他文本?StringCharSequence

在编写字符串文字时,我们可以使用带有反斜杠的 Unicode 转义序列。但我对使用整数变量、软编码而不是硬编码 Unicode 字符感兴趣。

4

1 回答 1

0

tl;博士

String s = Character.toString( 128_567 ) ;

细节

您要求提供 , 的Character对象StringCharSequence.

Character

该类Character实际上是legacy,仅仅是原始char类型的对象包装器。该char类型也是传统的,内部定义为 16 位数字,仅限于 Unicode 代码点的前 64K。Unicode 现在分配给字符的代码点数量是其两倍多,因此char无法表示大多数字符。

所以我们不能为基本多语言平面Character字符集之外的字符实例化一个对象。因此,作为一种解决方法,生成一个包含单个字符的。可以处理任何和所有 Unicode 字符,但不能。Character.toString( int )StringString Character

String Character.toString( int )

要获取String包含由 确定的单个字符的对象int,请将 传递intCharacter.toString()

例如,我们使用U+1F637(十进制:128,567)FACE WITH MEDICAL MASK处的表情符号字符。

// -----|  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 ) ;

输出2:

请参阅在 IdeOne.com 上实时运行的代码

CharSequence

上面的代码可以工作,String就像CharSequence.

CharSequence cs = Character.toString( 128_567 ) ;     // Returns a `String` which is a `CharSequence`. 

appendCodePoint

该类StringBuilder提供了一种appendCodePoint通过分配的 Unicode 代码点编号添加字符的方法。同样适用于线程安全StringBuffer

于 2020-02-22T00:15:18.417 回答