new end java regex split newline

end - java new line string



Split Java String de New Line (17)

Estoy tratando de dividir el texto en un JTextArea usando una expresión regular para dividir la Cadena por /n Sin embargo, esto no funciona y también lo intenté con /r/n|/r|n y muchas otras combinaciones de expresiones regulares. Código:

public void insertUpdate(DocumentEvent e) { String split[], docStr = null; Document textAreaDoc = (Document)e.getDocument(); try { docStr = textAreaDoc.getText(textAreaDoc.getStartPosition().getOffset(), textAreaDoc.getEndPosition().getOffset()); } catch (BadLocationException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } split = docStr.split("//n"); }


Como alternativa a las respuestas anteriores, se puede usar la API Splitter la guayaba si se van a aplicar otras operaciones a las líneas resultantes, como recortar líneas o filtrar líneas vacías:

import com.google.common.base.Splitter; Iterable<String> split = Splitter.onPattern("/r?/n").trimResults().omitEmptyStrings().split(docStr);

Tenga en cuenta que el resultado es un Iterable y no una matriz.


Después de intentos fallidos sobre la base de todas las soluciones dadas. Reemplazo a /n con alguna palabra especial y luego se divide. Para mi siguiente paso hice el truco:

article = "Alice phoned/n bob."; article = article.replace("//n", " NEWLINE "); String sen [] = article.split(" NEWLINE ");

No pude replicar el ejemplo dado en la pregunta. Pero, supongo que esta lógica puede ser aplicada.


El código anterior en realidad no hace nada visible, solo calcula y luego descarga el cálculo. ¿Es el código que usaste o solo un ejemplo para esta pregunta?

intenta hacer textAreaDoc.insertString (int, String, AttributeSet) al final?


Esto debería cubrirte:

String lines[] = string.split("//r?//n");

Solo hay dos líneas nuevas (UNIX y Windows) de las que debe preocuparse.


Hay tres convenciones diferentes (podría decirse que son estándares de facto ) para establecer y mostrar un salto de línea:

  • carriage return + line feed
  • line feed
  • carriage return

En algunos editores de texto, es posible intercambiar uno por el otro:

Lo más simple es normalizar el line feed y luego dividir.

final String[] lines = contents.replace("/r/n", "/n") .replace("/r", "/n") .split("/n", -1);


No tienes que hacer doble escape de personajes en grupos de personajes.

Para todas las líneas no vacías use:

String.split("[/r/n]+")


Para preservar las líneas vacías para evitar el uso aplastado:

String lines[] = String.split("//r?//n", -1);


Se ha introducido una nueva lines método en String clase String en java-11 , que devuelve Stream<String>

Devuelve una secuencia de subcadenas extraídas de esta cadena particionada por terminadores de línea.

Los terminadores de línea reconocidos son avance de línea "/ n" (U + 000A), retorno de carro "/ r" (U + 000D) y un retorno de carro seguido inmediatamente por un avance de línea "/ r / n" (U + 000D U + 000A ).

Aquí están algunos ejemplos:

jshell> "lorem /n ipusm /n sit".lines().forEach(System.out::println) lorem ipusm sit jshell> "lorem /n ipusm /r sit".lines().forEach(System.out::println) lorem ipusm sit jshell> "lorem /n ipusm /r/n sit".lines().forEach(System.out::println) lorem ipusm sit

String#lines()


Si no quieres líneas vacías:

String.split("[//r//n]+")


Si, por alguna razón, no desea usar String.split (por ejemplo, debido a expresiones regulares ) y desea usar la programación funcional en Java 8 o más reciente:

List<String> lines = new BufferedReader(new StringReader(string)) .lines() .collect(Collectors.toList());


Tal vez esto podría funcionar:

Elimine las barras invertidas dobles del parámetro del método de división:

split = docStr.split("/n");


Todas las respuestas dadas aquí en realidad no respetan la definición de Javas de nuevas líneas como se da en, por ejemplo, BufferedReader # readline. Java acepta /n , /r y /r/n como nueva línea. Algunas de las respuestas coinciden con varias líneas vacías o archivos con formato incorrecto. P.ej. <sometext>/n/r/n<someothertext> al usar [/r/n]+ daría como resultado dos líneas.

String lines[] = string.split("(/r/n|/r|/n)", -1);

En contraste, la respuesta anterior tiene las siguientes propiedades:

  • cumple con la definición de Javas de una nueva línea como, por ejemplo, BufferedReader la está utilizando
  • no coincide con múltiples lineas nuevas
  • no elimina las líneas vacías que se arrastran

método de split está utilizando expresiones regulares (expresiones regulares). Dado que Java 8 regex admite /R que representa (de la documentación de la clase Pattern ):

Comparador de líneas
/ R Cualquier secuencia de salto de línea de Unicode, es equivalente a /u000D/u000A|[/u000A/u000B/u000C/u000D/u0085/u2028/u2029]

Así que podemos usarlo para emparejar:

Como se ve, /r/n se coloca al inicio de la expresión regular, lo que garantiza que la expresión regular intentará hacer coincidir primero este par , y solo si falla, intentará hacer coincidir los separadores de línea de un solo carácter .

Por lo tanto, si desea dividir en línea, use split("//R") .

Si no desea eliminar de la matriz resultante las cadenas vacías "" use split(regex, limit) con un parámetro de limit negativo como split("//R", -1) .

Si desea tratar una o más líneas vacías continuas como un solo delimitador, use split("//R+") .


String lines[] =String.split( System.lineSeparator())


String.split(System.getProperty("line.separator"));

Esto debería ser independiente del sistema.


package in.javadomain; public class JavaSplit { public static void main(String[] args) { String input = "chennai/nvellore/ncoimbatore/nbangalore/narcot"; System.out.println("Before split:/n"); System.out.println(input); String[] inputSplitNewLine = input.split("//n"); System.out.println("/n After split:/n"); for(int i=0; i<inputSplitNewLine.length; i++){ System.out.println(inputSplitNewLine[i]); } } }


  • prueba esta esperanza fue útil para ti

String split[], docStr = null; Document textAreaDoc = (Document)e.getDocument(); try { docStr = textAreaDoc.getText(textAreaDoc.getStartPosition().getOffset(), textAreaDoc.getEndPosition().getOffset()); } catch (BadLocationException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } split = docStr.split("/n");