我试图从一个字符串中拆分出所有的汉字,但我遇到了一个奇怪的字符情况𥑮
scala> "𥑮"
res1: String = 𥑮
scala> res1.length
res2: Int = 2
scala> res1.getBytes
res3: Array[Byte] = Array(-16, -91, -111, -82)
scala> res1(0)
res4: Char = ?
scala> res1(1)
res5: Char = ?
它是单个字符,但 Java/Scala 将其确定为两个未知字符。通常我看到汉字在 UTF-8 中占用三个字节,但这个字符占用四个字节。
因此,我无法拆分字符串并找到这个单个字符。更糟糕的是,当使用 myString.replaceAll("[^\\p{script=Han}]", "")
踢掉所有非汉字时,𥑮的第二部分被替换了它变成了一个无效的字符串。
有什么解决办法吗?我在 Ubuntu 上使用 openjdk-8-jdk。
最佳答案
对于你应该使用的长度
string.codePointCount(0, string.length());
对于替换,最好避免基于字符的正则表达式。您可以编写一个依赖于 String#offsetByCodePoints()
的循环,并根据 String.codePointAt()
和 Character.isIdeographic()
手动删除字符.
关于java - Java/Scala String中确定为长度为2的单个汉字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28761385/