我想在Java中表示一个Unicode字符。哪个原始或类适合于此?
请注意,我希望能够存储任何unicode字符,这对于2字节<div class="dropdown-trigger" (click)="contentToggle()">
<ng-content select="dropdown-trigger"></ng-content>
</div>
<div class="dropdown-content" *ngIf="showContent">
<ng-content select="dropdown-content"></ng-content>
</div>
来说可能太大了。
答案 0 :(得分:11)
char
确实是16位a char
corresponds to a UTF-16 code unit。不适合单个UTF-16代码单元的字符(例如Emojis)需要两个char
s。
如果由于某种原因需要单独存储它们,可以使用int
。对于Unicode中当前允许的所有0x10FFFF代码点,它有足够的空间(然后是一些空间)。这就是JDK使用的内容,例如Character.codePointAt(CharSequence seq, int index)
和String(int[] codePoints, int offset, int count)
。
无偿转换示例(live on ideone):
String s = "";
int emoji = Character.codePointAt(s, 0);
String unumber = "U+" + Integer.toHexString(emoji).toUpperCase();
System.out.println(s + " is code point " + unumber);
String s2 = new String(new int[] { emoji }, 0, 1);
System.out.println("Code point " + unumber + " converted back to string: " + s2);
System.out.println("Successful round-trip? " + s.equals(s2));
输出:
is code point U+1F602 Code point U+1F602 converted back to string: Successful round-trip? true
答案 1 :(得分:1)
取决于角色的定义:
如果您指的是一个 Unicode代码点,请使用int
,它可以保存U + 0000到U + 1FFFFF的每个值。
但是,在某些情况下,显示为一个字符的内容会占用多个代码点。这在表情符号中尤为常见,例如
"+++"
。以最合乎逻辑的方式存储那些使用String
。