Ich habe eine Zeichenfolge, die Text enthält, gefolgt von einer Leerzeile. Was ist der beste Weg, um das Teil mit Text zu erhalten, aber die Leerzeichen-Zeilenumbruch am Ende zu entfernen?
Ich habe eine Zeichenfolge, die Text enthält, gefolgt von einer Leerzeile. Was ist der beste Weg, um das Teil mit Text zu erhalten, aber die Leerzeichen-Zeilenumbruch am Ende zu entfernen?
Antworten:
Verwenden Sie die String.trim()
Methode, um Leerzeichen (Leerzeichen, neue Zeilen usw.) vom Anfang und Ende der Zeichenfolge zu entfernen.
String trimmedString = myString.trim();
String.replaceAll("[\n\r]", "");
String cleanString = dirtyString.strip() ; // Call new `String::string` method.
String::strip…
Die alte String::trim
Methode hat eine seltsame Definition von Leerzeichen .
Wie hier erläutert , fügt Java 11 strip…
der String
Klasse neue Methoden hinzu . Diese verwenden eine Unicode-versiertere Definition von Leerzeichen. Siehe die Regeln dieser Definition in der Klasse JavaDoc für Character::isWhitespace
.
Beispielcode.
String input = " some Thing ";
System.out.println("before->>"+input+"<<-");
input = input.strip();
System.out.println("after->>"+input+"<<-");
Oder Sie können nur das führende oder nur das nachfolgende Leerzeichen entfernen.
Sie erwähnen nicht genau, welche Codepunkte. Ihre Zeilenumbrüche bestehen. Ich kann mir vorstellen, dass Ihre neue Zeile wahrscheinlich in dieser Liste von Codepunkten enthalten ist, auf die Folgendes abzielt strip
:
Dieser Java-Code macht genau das, was im Titel der Frage gestellt wird, nämlich "Zeilenumbrüche vom Anfang und Ende eines String-Java entfernen":
String.replaceAll("^[\n\r]", "").replaceAll("[\n\r]$", "")
Entfernen Sie Zeilenumbrüche nur am Ende der Zeile:
String.replaceAll("[\n\r]$", "")
Entfernen Sie Zeilenumbrüche nur am Zeilenanfang:
String.replaceAll("^[\n\r]", "")
Wenn Ihre Zeichenfolge möglicherweise vorhanden ist null
, sollten Sie StringUtils.trim()
die nullsichere Version von verwenden String.trim()
.
String trimStartEnd = "\n TestString1 linebreak1\nlinebreak2\nlinebreak3\n TestString2 \n";
System.out.println("Original String : [" + trimStartEnd + "]");
System.out.println("-----------------------------");
System.out.println("Result String : [" + trimStartEnd.replaceAll("^(\\r\\n|[\\n\\x0B\\x0C\\r\\u0085\\u2028\\u2029])|(\\r\\n|[\\n\\x0B\\x0C\\r\\u0085\\u2028\\u2029])$", "") + "]");
Ich werde auch eine Antwort hinzufügen, da die angegebene Antwort nicht ausreichte, obwohl ich dieselbe Frage hatte. Nach einiger Überlegung wurde mir klar, dass dies mit einem regulären Ausdruck sehr einfach möglich ist.
So entfernen Sie Zeilenumbrüche von Anfang an:
// Trim left
String[] a = "\n\nfrom the beginning\n\n".split("^\\n+", 2);
System.out.println("-" + (a.length > 1 ? a[1] : a[0]) + "-");
und Ende einer Zeichenfolge:
// Trim right
String z = "\n\nfrom the end\n\n";
System.out.println("-" + z.split("\\n+$", 2)[0] + "-");
Ich bin sicher, dass dies nicht die leistungsfähigste Methode zum Trimmen einer Zeichenfolge ist. Es scheint jedoch der sauberste und einfachste Weg zu sein, einen solchen Vorgang zu integrieren.
Beachten Sie, dass dieselbe Methode zum Trimmen von Variationen und Kombinationen von Zeichen an beiden Enden angewendet werden kann, da es sich um einen einfachen regulären Ausdruck handelt.
split()
ist nur die Grenze. Lassen Sie es aus, wenn Sie eine unbegrenzte Anzahl von Malen übereinstimmen möchten.
String text = readFileAsString("textfile.txt");
text = text.replace("\n", "").replace("\r", "");