end - Split Java String de New Line




java split \n (12)

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.


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);

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, 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");

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())


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");






newline