我有一个像这样的字符串abc
,我想将其拆分为单个字符/字符串。
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
答案 0 :(得分:5)
根据Character and String APIs docs,您需要使用代码点来正确处理UTF多字节序列。
"abc".codePoints().mapToObj(Character::toChars).forEach(System.out::println);
将输出
a
b
c
答案 1 :(得分:5)
以下将完成工作:
List<String> split(String text) {
return text.codePoints()
.mapToObj(Character::toChars)
.map(String::valueOf)
.collect(Collectors.toList());
}
答案 2 :(得分:0)
有一个开放源代码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
此处是指向该文章的链接,该文章解释了MgntUtils库及其获取位置(包括javadoc和源代码):Open Source Java library with stack trace filtering, Silent String parsing Unicode converter and Version comparison。查找段落“ 字符串Unicode转换器”