Separar una cadena Java con '\ r \ n', '\ r' o '\ n' y mantenerlo con la anterior subcadena

ascetic652:

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.

El cuarto de aves:

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 \ro \n.

Cuando \r\nse encuentra en la cadena de ejemplo, la aserción hacia atrás será cierto después \ry se dividirá por primera vez.

A continuación, la aserción hacia atrás será cierto después \ny se dividirá por segunda vez.

Lo que se podría hacer es el uso \Ren 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)");

Demos de Java

Otra opción para fijar su expresión regular es que sea un grupo atómico :

(?<=(?>\\r\\n|\\r|\\n))

Demos de Java

La lectura de este post , cuando la \restá adaptada en la búsqueda hacia atrás utilizando un grupo atómico, la siguiente \ntambién se corresponde.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=205713&siteId=1
Recomendado
Clasificación