给定Unicode代码点的编号,如何获取该字符的字符串或CharSequence对象 [英] Given the number of a Unicode code point, how can I obtain a String or CharSequence object for that character

查看:44
本文介绍了给定Unicode代码点的编号,如何获取该字符的字符串或CharSequence对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我看过有关在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-bitschar限制在64K范围内,远远不够。

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

给定int的➥,如何获取CharacterString的对象或CharSequence的某个实现,以便我可以加入到其他文本?

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

推荐答案

tl;dr

String s = Character.toString( 128_567 ) ;

😷

详细信息

您请求的对象是CharacterStringCharSequence的某个实现。

Character

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

因此我们不能为Basic Multilingual Plane字符集之外的字符实例化Character对象。因此,作为一种解决办法,Character.toString( int )会生成一个包含单个字符的StringString可以处理任何和所有Unicode字符,而Character不能。

String🡄Character.toString( int )

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

作为示例,我们使用FACE WITH MEDICAL MASKU+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

上面的代码可以工作,因为StringCharSequence的实现。

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

appendCodePoint

StringBuilder类提供了一个方法appendCodePoint,用于通过为其分配的Unicode代码点编号添加字符。Ditto用于线程安全StringBuffer

这篇关于给定Unicode代码点的编号,如何获取该字符的字符串或CharSequence对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆