pis*_*hen 11 java scala character-encoding
我正试图从一个字符串中分割掉所有的汉字,但是我遇到了一个奇怪的角色
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 = ?
Run Code Online (Sandbox Code Playgroud)
它是单个字符,但Java/Scala将其确定为两个未知字符.通常我看到中文字符在UTF-8中占用三个字节,但这个字符需要四个字符.
因此,我无法拆分String并找到这个单个字符.更糟糕的是,当myString.replaceAll("[^\\p{script=Han}]", "")用于踢出所有非中文字符时,第二部分被替换,它变成无效的字符串.
这有什么解决方案吗?我在Ubuntu上使用openjdk-8-jdk.
你应该使用长度
string.codePointCount(0, string.length());
Run Code Online (Sandbox Code Playgroud)
对于替换,最好避免使用基于字符的正则表达式.你可以写一个循环依赖String#offsetByCodePoints(),并手动删除基于字符String.codePointAt()和Character.isIdeographic().
| 归档时间: |
|
| 查看次数: |
3079 次 |
| 最近记录: |