如何在Java中正确计算字符串的长度?
我知道在代码单元/代码点上或多或少都有工作String#length
的各种方法Character
。
考虑到诸如语言/语言环境,规范化和字素簇之类的东西,Java中建议的实际返回Unicode标准(UAX#29)指定的结果的方法是什么?
回答:
java.text.BreakIterator
能够遍历文本,并可以报告“字符”,单词,句子和行边界。
考虑以下代码:
def length(text: String, locale: java.util.Locale = java.util.Locale.ENGLISH) = { val charIterator = java.text.BreakIterator.getCharacterInstance(locale)
charIterator.setText(text)
var result = 0
while(charIterator.next() != BreakIterator.DONE) result += 1
result
}
运行它:
scala> val text = "Thîs lóo̰ks we̐ird!"text: java.lang.String = Thîs lóo̰ks we̐ird!
scala> val length = length(text)
length: Int = 17
scala> val codepoints = text.codePointCount(0, text.length)
codepoints: Int = 21
使用代理对:
scala> val parens = "\uDBFF\uDFFCsurpi\u0301se!\uDBFF\uDFFD"parens: java.lang.String = ????surpíse!????
scala> val length = length(parens)
length: Int = 10
scala> val codepoints = parens.codePointCount(0, parens.length)
codepoints: Int = 11
scala> val codeunits = parens.length
codeunits: Int = 13
在大多数情况下,这应该可以完成工作。
以上是 如何在Java中正确计算字符串的长度? 的全部内容, 来源链接: utcz.com/qa/420252.html