如何在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

回到顶部