Wie entfernt man doppelte Leerstellen in einer Zeichenkette mit Java?

Wie entfernt man doppelte Leerzeichen (einschließlich Tabulatoren, Zeilenumbrüche, Leerzeichen usw.) in einer Zeichenkette mit Java?

Solutions Collecting From Web of "Wie entfernt man doppelte Leerstellen in einer Zeichenkette mit Java?"

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 das?

\s+ ist ein regulärer Ausdruck. \s entspricht einem Leerzeichen, einer Registerkarte, einer neuen Zeile, Wagenrücklauf, einem Formularvorschub oder einer vertikalen Registerkarte, und + sagt “eine oder mehrere von diesen”. Somit wird der obige Code alle “Leerzeichen-Teilstrings” länger als ein Zeichen mit einem einzelnen Leerzeichen zusammenbrechen lassen.


Quelle: Java: Entfernen von doppelten Leerstellen in Zeichenfolgen

Sie können die Regex verwenden

 (\s)\1 

und

Ersetzen Sie es durch $1 .

Java-Code:

 str = str.replaceAll("(\\s)\\1","$1"); 

Wenn die Eingabe "foo\t\tbar " Sie "foo\tbar " als Ausgabe
Wenn die Eingabe jedoch "foo\t bar" ist, bleibt sie unverändert, da sie keine fortlaufenden Leerzeichen enthält.

Wenn Sie alle Leerzeichen (Leerzeichen, vertikale Registerkarte, horizontale Registerkarte, Wagenrücklauf, Seitenvorschub, neue Zeile) als Leerzeichen behandeln, können Sie die folgende Regex 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(" "); 

Wobei string die Zeichenfolge ist, auf der du doppelte Leerzeichen entfernen musst

hi die schnellste (aber nicht schönste) die ich gefunden habe ist

 while (cleantext.indexOf(" ") != -1) cleantext = StringUtils.replace(cleantext, " ", " "); 

Dies läuft ziemlich schnell auf Android im Gegensatz zu einem Regex

 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 weißen Räume desselben Typs durch einen weißen Raum ersetzen wird. Das ist:

  Hello!\n\n\nMy World 

wird sein

  Hello!\nMy World 

Beachten Sie, dass immer noch führende und nachfolgende Leerzeichen vorhanden sind. Also meine komplette Lösung ist:

 str = str.trim().replaceAll("(\\s)+", "$1")); 

trim() ersetzt hier alle führenden und nachfolgenden Leerzeichen mit “”. (\\s) dient zum Erfassen von \\s (also Leerzeichen wie ”, ‘\ n’, ‘\ t’) in Gruppe # 1 . + Zeichen ist für die Übereinstimmung von 1 oder mehr vorhergehenden Token. So können (\\s)+ aufeinanderfolgende Zeichen (1 oder mehr) unter beliebigen einzelnen Leerzeichen (”, ‘\ n’ oder ‘\ t’) sein. $1 dient zum Ersetzen der übereinstimmenden Zeichenfolgen durch die Zeichenfolge der Gruppe # 1 (die nur ein Leerzeichen enthält) des übereinstimmenden Typs (das ist das einzelne Leerzeichen, das übereinstimmte). Die obige Lösung wird sich folgendermaßen ändern:

  Hello!\n\n\nMy World 

wird sein

 Hello!\nMy World 

Ich habe meine obige Lösung hier nicht gefunden, also habe ich sie gepostet.

Wenn Sie alle führenden und nachfolgenden überflüssigen Leerzeichen löschen möchten, sollten Sie Folgendes tun:

 // \\A = Start of input boundary // \\z = End of input boundary string = string.replaceAll("\\A\\s+(.*?)\\s+\\z", "$1"); 

Dann können Sie die Duplikate mit den anderen hier aufgeführten Strategien entfernen:

 string = string.replaceAll("\\s+"," "); 

Sie können auch String Tokeniser für jeden Bereich, Tab, Newline und alle verwenden. Ein einfacher Weg ist,

 String s = "Your Text Here"; StringTokenizer st = new StringTokenizer( s, " " ); while(st.hasMoreTokens()) { System.out.print(st.nextToken()); } 

Dies kann in drei Schritten geschehen:

  1. Konvertiere den String in ein Zeichen-Array (ToCharArray)
  2. Übernehmen Sie die Schleife für ein Charater-Array
  3. Wenden Sie dann die function string replace an (Replace (“sting, das ersetzt werden soll”, “original string”));