Wie entferne ich Zeilenumbrüche aus einer Datei in Java?

Wie kann ich alle Zeilenumbrüche aus einer Zeichenkette in Java so ersetzen, dass sie unter Windows und Linux funktionieren (dh keine OS-spezifischen Probleme von Wagenrücklauf / Zeilenvorschub / neue Zeile usw.)?

Ich habe versucht (beachten Sie, ReadFileAsString ist eine function, die eine Textdatei in einen String liest):

String text = readFileAsString("textfile.txt"); text.replace("\n", ""); 

aber das scheint nicht zu funktionieren.

Wie kann das gemacht werden?

   

Sie müssen text auf die Ergebnisse von text.replace() :

 String text = readFileAsString("textfile.txt"); text = text.replace("\n", "").replace("\r", ""); 

Dies ist notwendig, da Strings unveränderlich sind – der Aufruf von replace ändert nicht den ursprünglichen String, sondern gibt einen neuen zurück, der geändert wurde. Wenn Sie das Ergebnis nicht dem text zuweisen, ist der neue String verloren und die Daten werden gesammelt.

Wie zum Abrufen der Newline-String für jede Umgebung – das ist durch den Aufruf von System.getProperty("line.separator") verfügbar.

Wie in anderen Antworten erwähnt, funktioniert Ihr Code nicht hauptsächlich, da String.replace(...) die Zielzeichenfolge nicht ändert. (Es kann nicht – Java-Strings sind unveränderlich!) Was es tatsächlich tut, erzeugt einen neuen String, bei dem die Zeichen nach Bedarf geändert werden. Aber dein Code wirft dann diesen String weg …


Hier sind einige mögliche Lösungen. Welches ist am richtigsten hängt davon ab, was genau Sie versuchen zu tun.

 // #1 text = text.replace("\n", ""); 

Entfernt einfach alle Zeilenumbruchzeichen. Dies ist nicht mit Windows- oder Mac-Terminierungen vereinbar.

 // #2 text = text.replace(System.getProperty("line.separator"), ""); 

Entfernt alle Leitungsabschlusszeichen für die aktuelle Plattform. Dies ist nicht mit dem Fall vereinbar, in dem Sie beispielsweise versuchen, eine UNIX-Datei unter Windows zu verarbeiten oder umgekehrt.

 // #3 text = text.replaceAll("\\r|\\n", ""); 

Entfernt alle Windows-, UNIX- oder Mac-Leitungsabschlusszeichen. Wenn die Eingabedatei jedoch Text ist, verkettet dies Wörter; z.B

 Goodbye cruel world. 

wird

 Goodbye cruelworld. 

Vielleicht möchtest du das wirklich tun:

 // #4 text = text.replaceAll("\\r\\n|\\r|\\n", " "); 

welches jeden Zeilenabschluss durch ein Leerzeichen ersetzt.

Wenn Sie nur Leitungsabschlusszeichen entfernen möchten, die für das aktuelle Betriebssystem gültig sind, können Sie Folgendes tun:

 text = text.replaceAll(System.getProperty("line.separator"), ""); 

Wenn Sie sicherstellen möchten, dass Sie alle Zeilentrennzeichen entfernen, können Sie Folgendes tun:

 text = text.replaceAll("\\r|\\n", ""); 

Oder, etwas ausführlicher, aber weniger regexy:

 text = text.replaceAll("\\r", "").replaceAll("\\n", ""); 
 str = str.replaceAll("\\r\\n|\\r|\\n", " "); 

Arbeitete perfekt für mich nach viel suchen, mit jeder anderen Linie gescheitert.

Das wäre effizient, denke ich

 String s; s = "try this\n try me."; s.replaceAll("[\\r\\n]+", "") 

für Syntax-Highlight bearbeitet

Zeilenumbrüche sind unter Windows / Linux / Mac nicht identisch. Sie sollten System.getProperties mit dem Attribut line.separator verwenden.

Diese function normalisiert alle Leerzeichen einschließlich Zeilenumbrüchen auf einzelne Leerzeichen. Nicht genau das, was die ursprüngliche Frage verlangt, aber wahrscheinlich genau das tut, was in vielen Fällen benötigt wird:

 import org.apache.commons.lang3.StringUtils; final String cleansedString = StringUtils.normalizeSpace(rawString); 
 String text = readFileAsString("textfile.txt").replaceAll("\n", ""); 

Obwohl die Definition von trim () auf der oracle-Website lautet “Gibt eine Kopie der Zeichenfolge zurück, wobei führende und nachfolgende Leerzeichen weggelassen werden.”

Die Dokumentation lässt nicht zu, dass neue Zeilenzeichen (vorangestellt und nachgestellte Zeichen) ebenfalls entfernt werden.

Kurz String text = readFileAsString("textfile.txt").trim(); wird auch für dich arbeiten. (Überprüft mit Java 6)

 String text = readFileAsString("textfile.txt").replace("\n",""); 

.replace gibt eine neue Zeichenfolge zurück, Zeichenfolgen in Java sind unveränderlich.

Vielleicht möchten Sie Ihre Datei mit einem BufferedReader lesen. Diese class kann Eingaben in einzelne Zeilen aufteilen, die Sie beliebig zusammenstellen können. Die Art, wie BufferedReader arbeitet, erkennt die Zeilenendungskonventionen der Linux-, Windows- und MacOS-Welten automatisch, unabhängig von der aktuellen Plattform.

Daher:

 BufferedReader br = new BufferedReader( new InputStreamReader("textfile.txt")); StringBuilder sb = new StringBuilder(); for (;;) { String line = br.readLine(); if (line == null) break; sb.append(line); sb.append(' '); // SEE BELOW } String text = sb.toString(); 

Beachten Sie, dass readLine() in der zurückgegebenen Zeichenfolge nicht enthält. Der obige Code hängt ein Leerzeichen an, um zu vermeiden, dass das letzte Wort einer Zeile und das erste Wort der nächsten Zeile zusammengefügt werden.

Ich finde es seltsam, dass (Apache) StringUtils hier noch nicht behandelt wurde.

Sie können alle Zeilenumbrüche (oder jedes andere Vorkommen einer .replace ) aus einer Zeichenfolge .replace , indem Sie die .replace Methode verwenden

 StringUtils.replace(myString, "\n", ""); 

Diese Zeile ersetzt alle Zeilenumbrüche durch die leere Zeichenfolge.

Da newline technisch gesehen ein Zeichen ist, können Sie optional die .replaceChars Methode verwenden, die Zeichen ersetzt

 StringUtils.replaceChars(myString, '\n', ''); 

Zu Ihrer Information, wenn Sie gleichzeitige Muti-Zeilenumbrüche durch einzelne Zeilenumbrüche ersetzen können, dann können Sie verwenden

 myString.trim().replaceAll("[\n]{2,}", "\n") 

Oder ersetzen Sie sie durch ein einzelnes Leerzeichen

 myString.trim().replaceAll("[\n]{2,}", " ") 

Sie können apache commons IOUtils verwenden, um die Zeile zu durchlaufen und jede Zeile an StringBuilder anzufügen. Und vergiss nicht, den InputStream zu schließen

 StringBuilder sb = new StringBuilder(); FileInputStream fin=new FileInputStream("textfile.txt"); LineIterator lt=IOUtils.lineIterator(fin, "utf-8"); while(lt.hasNext()) { sb.append(lt.nextLine()); } String text = sb.toString(); IOUtils.closeQuitely(fin); 

Sie können generische Methoden verwenden, um ein beliebiges Zeichen durch ein beliebiges Zeichen zu ersetzen.

 public static void removeWithAnyChar(String str, char replceChar, char replaceWith) { char chrs[] = str.toCharArray(); int i = 0; while (i < chrs.length) { if (chrs[i] == replceChar) { chrs[i] = replaceWith; } i++; } } 

org.apache.commons.lang.StringUtils # chopNewline

Versuchen Sie Folgendes:

  textValue= textValue.replaceAll("\n", ""); textValue= textValue.replaceAll("\t", ""); textValue= textValue.replaceAll("\\n", ""); textValue= textValue.replaceAll("\\t", ""); textValue= textValue.replaceAll("\r", ""); textValue= textValue.replaceAll("\\r", ""); textValue= textValue.replaceAll("\r\n", ""); textValue= textValue.replaceAll("\\r\\n", "");