Mi cadena de entrada contiene el tipo mixto de separadores de línea incluyendo '\ r \ n', '\ r' o '\ n'. Quiero dividir la cadena y mantener el separador de acuerdo con la subcadena que lo precede. He seguido a continuación dos publicaciones
Cómo dividir una cadena, sino también mantener los delimitadores?
Dividir String de Java por New Line
y llegar a algo como:
String input = "1 dog \r\n 2 cat";
String[] output = input.split( "(?<=((\\r\\n)|\\r|\\n))")));
la salida es ["1 dog\r", "\n", " 2 cat"]
, sin embargo, la salida deseada es ["1 dog\r\n", " 2 cat"]
.
Si cambio la entrada a cualquiera String input = "1 dog \r 2 cat";
o String input = "1 dog \n 2 cat";
de salida, mi código puede producir deseada. Por favor avise. Gracias por adelantado.
Se obtiene el resultado ["1 dog\r", "\n", " 2 cat"]
debido a que su patrón utiliza una alternancia que coincidirá con cualquiera (\r\n)
o \r
o \n
.
Cuando \r\n
se encuentra en la cadena de ejemplo, la aserción hacia atrás será cierto después \r
y se dividirá por primera vez.
A continuación, la aserción hacia atrás será cierto después \n
y se dividirá por segunda vez.
Lo que se podría hacer es el uso \R
en la búsqueda hacia atrás positivo para afirmar lo que está a la izquierda es una secuencia de Unicode nueva línea :
String input = "1 dog \r\n 2 cat";
String[] output = input.split("(?<=\\R)");
Otra opción para fijar su expresión regular es que sea un grupo atómico :
(?<=(?>\\r\\n|\\r|\\n))
La lectura de este post , cuando la \r
está adaptada en la búsqueda hacia atrás utilizando un grupo atómico, la siguiente \n
también se corresponde.