将 UTF-16 字符串拆分为单个 chars/strings
Split UTF-16 String into single chars/strings
我有一个看起来像这样的字符串 abc
,我想将它拆分为单个 chars/strings。
static List<String> split(String text ) {
List<String> list = new ArrayList<>(text.length());
for(int i = 0; i < text.length() ; i++) {
list.add(text.substring(i, i + 1));
}
return list;
}
public static void main(String... args) {
split("a\uD83D\uDC4Fb\uD83D\uDE42c")
.forEach(System.out::println);
}
正如您可能已经注意到的那样,我得到了两个奇怪的字符:
a
?
?
b
?
?
c
根据 Character and String APIs docs,您需要使用代码点来正确处理 UTF 多字节序列。
"abc".codePoints().mapToObj(Character::toChars).forEach(System.out::println);
会输出
a
b
c
以下将完成这项工作:
List<String> split(String text) {
return text.codePoints()
.mapToObj(Character::toChars)
.map(String::valueOf)
.collect(Collectors.toList());
}
有一个开源 MgntUtils 库(由我编写),它有一个实用程序,可以将任何字符串转换为 unicode,反之亦然(正确处理代码点),这可以帮助您处理问题并理解科学背后正在进行的内部工作。这是一个例子:
下面的代码
String result = "abc";
result = StringUnicodeEncoderDecoder.encodeStringToUnicodeSequence(result);
System.out.println(result);
result = StringUnicodeEncoderDecoder.decodeUnicodeSequenceToString(result);
System.out.println(result);
会产生以下结果:
\u0061\u1f44f\u0062\u1f642\u0063
abc
link 这篇文章解释了 MgntUtils 库以及从哪里获取它(包括 javadoc 和源代码):Open Source Java library with stack trace filtering, Silent String parsing Unicode converter and Version comparison。查找段落“String Unicode converter”
我有一个看起来像这样的字符串 abc
,我想将它拆分为单个 chars/strings。
static List<String> split(String text ) {
List<String> list = new ArrayList<>(text.length());
for(int i = 0; i < text.length() ; i++) {
list.add(text.substring(i, i + 1));
}
return list;
}
public static void main(String... args) {
split("a\uD83D\uDC4Fb\uD83D\uDE42c")
.forEach(System.out::println);
}
正如您可能已经注意到的那样,我得到了两个奇怪的字符:
a
?
?
b
?
?
c
根据 Character and String APIs docs,您需要使用代码点来正确处理 UTF 多字节序列。
"abc".codePoints().mapToObj(Character::toChars).forEach(System.out::println);
会输出
a
b
c
以下将完成这项工作:
List<String> split(String text) {
return text.codePoints()
.mapToObj(Character::toChars)
.map(String::valueOf)
.collect(Collectors.toList());
}
有一个开源 MgntUtils 库(由我编写),它有一个实用程序,可以将任何字符串转换为 unicode,反之亦然(正确处理代码点),这可以帮助您处理问题并理解科学背后正在进行的内部工作。这是一个例子:
下面的代码
String result = "abc";
result = StringUnicodeEncoderDecoder.encodeStringToUnicodeSequence(result);
System.out.println(result);
result = StringUnicodeEncoderDecoder.decodeUnicodeSequenceToString(result);
System.out.println(result);
会产生以下结果:
\u0061\u1f44f\u0062\u1f642\u0063
abc
link 这篇文章解释了 MgntUtils 库以及从哪里获取它(包括 javadoc 和源代码):Open Source Java library with stack trace filtering, Silent String parsing Unicode converter and Version comparison。查找段落“String Unicode converter”