我有一个看起来像这样的字符串,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);
}
Run Code Online (Sandbox Code Playgroud)
正如您可能已经注意到的那样,我得到了两个奇怪的角色:
a
?
?
b
?
?
c
Run Code Online (Sandbox Code Playgroud)
根据Character和String API文档,您需要使用代码点来正确处理UTF多字节序列.
"abc".codePoints().mapToObj(Character::toChars).forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
将输出
a
b
c
Run Code Online (Sandbox Code Playgroud)
以下将完成这项工作:
List<String> split(String text) {
return text.codePoints()
.mapToObj(Character::toChars)
.map(String::valueOf)
.collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
163 次 |
| 最近记录: |