Kotlin #toCharArray 给出了错误的字符
Kotlin #toCharArray giving wrong characters
我正在尝试遍历字符串中的字符。在这样做的同时,我发现 #toCharArray
函数没有正确拆分特殊字符。这是我的测试代码:
val text = "\uD835\uDC9C"
text.toCharArray().forEach {
println(it)
}
正在给我以下回复
?
?
所以它似乎认为 \uD835\uDC9C
是 2 个独立的字符。但是应该return只有一个元素
.
有谁知道如何从中提取正确的字符?
不幸的是,Kotlin Char
是 16 位的,因此基本多语言平面之外的字符需要用 2 Char
s(代理对)表示。一个Char
不够用
如果你想遍历字符串中的所有 Unicode codepoints,使用 codePoints
,它给你一个 IntStream
:
text.codePoints().forEachOrdered {
println(it)
}
这将按预期打印包含 "" 的整数代码点的一行。
如果你想真正看到“”,你需要将整数代码点转换为String
。回想一下,它不能放入 Char
.
text.codePoints().forEachOrdered {
println(String(intArrayOf(it), 0, 1))
// or println(Character.toString(it)) if you don't mind using java.lang.Character
}
这是代理对。它们不能存储在单个字符中。将其打印为字符串有什么问题?
val text = "\uD835\uDC9C"
println(text)
这会打印出您想要的字符。如果您的字符串中有多个字符,您可以每隔一个反斜杠拆分字符串并创建一个列表。
我正在尝试遍历字符串中的字符。在这样做的同时,我发现 #toCharArray
函数没有正确拆分特殊字符。这是我的测试代码:
val text = "\uD835\uDC9C"
text.toCharArray().forEach {
println(it)
}
正在给我以下回复
?
?
所以它似乎认为 \uD835\uDC9C
是 2 个独立的字符。但是应该return只有一个元素.
有谁知道如何从中提取正确的字符?
不幸的是,Kotlin Char
是 16 位的,因此基本多语言平面之外的字符需要用 2 Char
s(代理对)表示。一个Char
不够用
如果你想遍历字符串中的所有 Unicode codepoints,使用 codePoints
,它给你一个 IntStream
:
text.codePoints().forEachOrdered {
println(it)
}
这将按预期打印包含 "" 的整数代码点的一行。
如果你想真正看到“”,你需要将整数代码点转换为String
。回想一下,它不能放入 Char
.
text.codePoints().forEachOrdered {
println(String(intArrayOf(it), 0, 1))
// or println(Character.toString(it)) if you don't mind using java.lang.Character
}
这是代理对。它们不能存储在单个字符中。将其打印为字符串有什么问题?
val text = "\uD835\uDC9C"
println(text)
这会打印出您想要的字符。如果您的字符串中有多个字符,您可以每隔一个反斜杠拆分字符串并创建一个列表。