Antworten:
So was:
yourString = yourString.replaceAll("\\s+", " ");
Beispielsweise
System.out.println("lorem ipsum dolor \n sit.".replaceAll("\\s+", " "));
Ausgänge
lorem ipsum dolor sit.
Was bedeutet , dass \s+
Mittel?
\s+
ist ein regulärer Ausdruck. \s
Entspricht einem Leerzeichen, einer Registerkarte, einer neuen Zeile, einem Wagenrücklauf, einem Formularvorschub oder einer vertikalen Registerkarte und +
sagt "eine oder mehrere davon". Somit reduziert der obige Code alle "Leerzeichen-Teilzeichenfolgen", die länger als ein Zeichen sind, mit einem einzelnen Leerzeichen.
Quelle: Java: Entfernen doppelter Leerzeichen in Zeichenfolgen
\s+
aber was bedeutet 2 Backslash \\?
"\\"
stellt die Zeichenfolge dar, die aus einem einzelnen Backslash besteht. Also um \s+
dich zu repräsentieren schreibst "\\s+"
.
Sie können den regulären Ausdruck verwenden
(\s)\1
und
Ersetzen Sie es durch $1
.
Java-Code:
str = str.replaceAll("(\\s)\\1","$1");
Wenn die Eingabe ist, erhalten "foo\t\tbar "
Sie "foo\tbar "
als Ausgabe.
Wenn die Eingabe jedoch ist "foo\t bar"
, bleibt sie unverändert, da sie keine aufeinanderfolgenden Leerzeichen enthält.
Wenn Sie alle Leerzeichen (Leerzeichen, vertikale Registerkarte, horizontale Registerkarte, Wagenrücklauf, Formularvorschub, neue Zeile) als Leerzeichen behandeln, können Sie den folgenden regulären Ausdruck verwenden, um eine beliebige Anzahl aufeinanderfolgender Leerzeichen durch ein einzelnes Leerzeichen zu ersetzen :
str = str.replaceAll("\\s+"," ");
Wenn Sie jedoch zwei aufeinanderfolgende Leerzeichen durch ein einzelnes Leerzeichen ersetzen möchten, sollten Sie Folgendes tun:
str = str.replaceAll("\\s{2}"," ");
Versuchen Sie dies - Sie müssen import java.util.regex.*;
Pattern pattern = Pattern.compile("\\s+");
Matcher matcher = pattern.matcher(string);
boolean check = matcher.find();
String str = matcher.replaceAll(" ");
Wo string
ist Ihre Zeichenfolge, an der Sie doppelte Leerzeichen entfernen müssen?
Hallo, der schnellste (aber nicht schönste) Weg, den ich gefunden habe, ist
while (cleantext.indexOf(" ") != -1)
cleantext = StringUtils.replace(cleantext, " ", " ");
Dies läuft ziemlich schnell auf Android im Gegensatz zu einem regulären Ausdruck
String str = " Text with multiple spaces ";
str = org.apache.commons.lang3.StringUtils.normalizeSpace(str);
// str = "Text with multiple spaces"
Obwohl es zu spät ist, habe ich eine bessere Lösung gefunden (die für mich funktioniert), die alle aufeinanderfolgenden Leerzeichen des gleichen Typs durch ein Leerzeichen dieses Typs ersetzt. Das ist:
Hello!\n\n\nMy World
wird sein
Hello!\nMy World
Beachten Sie, dass es immer noch führende und nachfolgende Leerzeichen gibt. Meine Komplettlösung lautet also:
str = str.trim().replaceAll("(\\s)+", "$1"));
Hier trim()
ersetzt all vorderen und hinteren weißen Raum Strings mit „“. (\\s)
dient zum Erfassen \\s
(dh Leerzeichen wie '', '\ n', '\ t') in Gruppe 1 . +
Das Vorzeichen steht für die Übereinstimmung mit einem oder mehreren vorhergehenden Token. Es (\\s)+
können also aufeinanderfolgende Zeichen (1 oder mehr) unter einzelnen Leerzeichen ('', '\ n' oder '\ t') sein. $1
dient zum Ersetzen der übereinstimmenden Zeichenfolgen durch die Zeichenfolge der Gruppe 1 (die nur 1 Leerzeichen enthält) des übereinstimmenden Typs (dh das einzelne Leerzeichen, das übereinstimmt). Die obige Lösung ändert sich folgendermaßen:
Hello!\n\n\nMy World
wird sein
Hello!\nMy World
Ich habe meine obige Lösung hier nicht gefunden und sie daher veröffentlicht.
Wenn Sie alle führenden und nachfolgenden überflüssigen Leerzeichen entfernen möchten, möchten Sie Folgendes tun:
// \\A = Start of input boundary
// \\z = End of input boundary
string = string.replaceAll("\\A\\s+(.*?)\\s+\\z", "$1");
Anschließend können Sie die Duplikate mit den anderen hier aufgeführten Strategien entfernen:
string = string.replaceAll("\\s+"," ");
Dies kann in drei Schritten möglich sein: