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
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:
-
/u000D/000A
->/r/n
par - /u000A -> avance de línea (
/n
) - /u000B -> tabulación de líneas (NO confundir con la tabulación de caracteres
/t
que es/u0009
) - /u000C -> form feed (
/f
) - /u000D -> retorno de carro (
/r
) - /u0085 -> siguiente línea (NEL)
- /u2028 -> separador de línea
- /u2029 -> separador de párrafo
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");