我知道char不能包含Unicode字符(比如char c ='\ u1023')。那我该怎么做呢
String s = "ABCDEFG\u1023";
char[] c = s.toCharArray();
出于性能原因,我想将s转换为CharArray,因为我必须循环遍历可能非常长的字符串中的每个字符,这是低效的。任何达到相同结果的东西都可以。
非常感谢!
编辑: 实际上char可以包含unicode字符。我只是傻了。感谢那些帮助过的人。
答案 0 :(得分:10)
有人告诉你,在Java char
中不能包含Unicode字符,was wrong:
整数类型的值是以下范围内的整数:
- 对于
char
,从'\u0000'
到'\uffff'
,包括0到0 65535
答案 1 :(得分:5)
三件事:
toCharArray()
将返回一个与UTF16 String.codePointAt(...)
。如果您使用的是Java 1.4或更早版本,请查看ICU4J。答案 2 :(得分:1)
在Java中,char本质上是一个unsigned short。为了遍历包含char支持的范围之外的unicode字符的字符串(第一个65536),您应该使用以下模式,它将每个代码点存储为int。
for (int i = 0; i < str.length();) {
int ch = str.codePointAt(i);
// do stuff with ch...
i += Character.charCount(ch);
}
Java的设计是对前65536个字符的一流支持,当时这是对C / C ++的改进,它只支持前128或256个字符的一流支持。不幸的是,这意味着Java中必须使用上述模式来支持越来越常见的超出范围的字符。
答案 3 :(得分:1)
Java char
可以包含the most个Unicode字符,正如其他人已经提到的那样,但是基本多语言平面(BMP)之外的字符被分成多个char
并独立处理它们可能会破坏字符串。
为安全起见,您可以将字符串拆分为字符串数组:
String[] c = s.codePoints()
.mapToObj(cp -> new String(Character.toChars(cp)))
.toArray(size -> new String[size]);
...或使用Character
对象的isSurrogate
,isLowSurrogate
和isHighSurrogate
方法来阻止更改对中的char
个:{/ p>
Character.isSurrogate('a');