BreakIterator在Unicode UCD LineBreakTest上失败

时间:2019-02-18 23:33:11

标签: java unicode kotlin

Unicode联盟提供了一个LineBreakTest file,用于验证您的换行代码是否正常工作。使用Unicode的自有库 icu4j,我无法通过× [0.3] HYPHEN-MINUS (HY) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]测试用例。 可以与Java的内置库一起使用。根据{{​​3}},那里也应该休息一下。

我在这里想念什么?它说的地方应该不休息吗?此语言环境是否依赖,但未在LineBreakTest文件中指定?

这里有一些Kotlin代码可以重现。

val lineInstance = java.text.BreakIterator.getLineInstance()
val lineInstanceIcu4j = com.ibm.icu.text.BreakIterator.getLineInstance()

fun main() {
    println(lineBreakJava("-#"))
    println(lineBreakIcu4j("-#"))
}

fun lineBreakJava(text: String): MutableList<String> {
    lineInstance.setText(text)
    var start = lineInstance.first()
    var end = lineInstance.next()
    val breakableLocations = mutableListOf<String>()
    while (end != BreakIterator.DONE) {
        val substring = text.substring(start, end)
        breakableLocations.add(substring)
        start = end
        end = lineInstance.next()
    }
    return breakableLocations
}

fun lineBreakIcu4j(text: String): MutableList<String> {
    lineInstanceIcu4j.setText(text)
    var start = lineInstanceIcu4j.first()
    var end = lineInstanceIcu4j.next()
    val breakableLocations = mutableListOf<String>()
    while (end != BreakIterator.DONE) {
        val substring = text.substring(start, end)
        breakableLocations.add(substring)
        start = end
        end = lineInstanceIcu4j.next()
    }
    return breakableLocations
}

实际输出:

[-, #]
[-#]

预期输出:

[-, #]
[-, #]

编辑:

显然IntelliJ删除了我的icu4j依赖项。将其添加回去后,我得到了与之前发生的相反的事情。现在通过的测试用例失败了。我已经用 one 失败的案例更新了示例。

0 个答案:

没有答案