Консорциум Unicode предоставляет файл LineBreakTest для проверки правильности работы кода разрыва строки.Используя собственную библиотеку Unicode icu4j
, я не могу пройти тестовый пример × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
.Это работает со встроенной библиотекой Java.В соответствии с таблицей разрыва строки ucd там также должен быть разрыв.
Что мне здесь не хватает?Не должно ли быть перерыва, где это говорит?Зависит ли эта локаль, но не указана в файле LineBreakTest?
Вот некоторый код котлина для воспроизведения.
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
}
фактический вывод:
[-, #]
[-#]
ожидаемый вывод:
[-, #]
[-, #]
edit:
Очевидно, IntelliJ удалил мою зависимость от icu4j.После добавления этого я получаю обратное тому, что происходило раньше.Теперь проходящие тестовые задания не выполняются.Я обновил пример с one неудачных случаев.