El consorcio Unicode proporciona un archivo LineBreakTest para verificar que su código de salto de línea funciona correctamente. Usando la propia biblioteca de Unicode icu4j , no puedo pasar el caso de prueba × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3] . Esto funciona con la biblioteca integrada de Java. Según la tabla de ruptura de línea de UCD , también debería haber una ruptura allí.
¿Que me estoy perdiendo aqui? ¿No debería haber un corte donde dice? ¿Depende esta configuración regional, pero no está especificada en el archivo LineBreakTest?
Aquí hay un código kotlin para reproducir.
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 }salida real:
[-, #] [-#]Rendimiento esperado:
[-, #] [-, #]editar:
Aparentemente, IntelliJ había eliminado mi dependencia de icu4j. Después de volver a agregarlo, obtengo lo contrario de lo que estaba sucediendo antes. Ahora los casos de prueba que estaban pasando están fallando. He actualizado el ejemplo con uno de los casos fallidos.