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 Chars(代理对)表示。一个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)

这会打印出您想要的字符。如果您的字符串中有多个字符,您可以每隔一个反斜杠拆分字符串并创建一个列表。