350 Stimmen

Java: Ersetzen von 2 oder mehr Leerzeichen durch ein einzelnes Leerzeichen in einem String und Löschen von führenden und nachfolgenden Leerzeichen

Suche nach einer schnellen, einfachen Möglichkeit in Java, diese Zeichenfolge zu ändern

" hello     there   "

zu etwas, das wie folgt aussieht

"hello there"

wo ich all diese mehrfachen Leerzeichen durch ein einzelnes Leerzeichen ersetze, außer dass ich auch möchte, dass die ein oder mehreren Leerzeichen am Anfang der Zeichenfolge verschwinden.

Etwas wie das hier bringt mich teilweise dahin

String mytext = " hello     there   ";
mytext = mytext.replaceAll("( )+", " ");

aber nicht ganz.

10 Stimmen

Sie sollten in Erwägung ziehen, eine Antwort zu akzeptieren. Das macht es den Leuten, die später auf die Seite kommen, viel einfacher, eine endgültige Lösung zu wählen.

2 Stimmen

Dies ist eine der am meisten empfohlenen Methoden. => . String nameWithProperSpacing = StringUtils.normalizeSpace( stringWithLotOfSpaces );

4 Stimmen

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

8voto

Rafael Punkte 5685

In Kotlin würde es wie folgt aussehen

val input = "\n\n\n  a     string with     many    spaces,    \n"
val cleanedInput = input.trim().replace(Regex("(\\s)+"), " ")

7voto

Kunal Vohra Punkte 2501

Bislang wurden viele richtige Antworten gegeben und ich sehe viele positive Bewertungen. Allerdings funktionieren die genannten Wege zwar, sind aber nicht wirklich optimiert oder nicht wirklich lesbar. Ich bin kürzlich auf eine Lösung gestoßen, die jedem Entwickler gefallen wird.

String nameWithProperSpacing = StringUtils.normalizeSpace( stringWithLotOfSpaces );

Sie sind fertig. Dies ist eine lesbare Lösung.

6voto

Sameera Punkte 169

Trim()

Entfernt nur die führenden und nachgestellten Leerzeichen.

Aus Java Doc, "Gibt eine Zeichenkette zurück, deren Wert diese Zeichenkette ist, wobei alle führenden und nachfolgenden Leerzeichen entfernt werden."

System.out.println(" D ev  Dum my ".trim());

"D ev Dum my"

replace(), replaceAll()

Ersetzt alle leeren Zeichenfolgen im Wort,

System.out.println(" D ev  Dum my ".replace(" ",""));

System.out.println(" D ev  Dum my ".replaceAll(" ",""));

System.out.println(" D ev  Dum my ".replaceAll("\\s+",""));

Ausgabe:

"DevDummy"

"DevDummy"

"DevDummy"

Anmerkung: " \s +" ist ein regulärer Ausdruck, der dem Leerzeichen entspricht.

Hinweis : https://www.codedjava.com/2018/06/replace-all-spaces-in-string-trim.html

4voto

Avinash Raj Punkte 165992

Sie können auch Lookarounds verwenden.

test.replaceAll("^ +| +$|(?<= ) ", "");

OR

test.replaceAll("^ +| +$| (?= )", "")

<space>(?= ) entspricht einem Leerzeichen, auf das ein weiteres Leerzeichen folgt. Bei aufeinanderfolgenden Leerzeichen würde es also auf alle Leerzeichen passen, außer auf das letzte, da auf dieses kein Leerzeichen folgt. So bleibt nach dem Entfernen ein einzelnes Leerzeichen für aufeinanderfolgende Leerzeichen übrig.

Ejemplo:

    String[] tests = {
            "  x  ",          // [x]
            "  1   2   3  ",  // [1 2 3]
            "",               // []
            "   ",            // []
        };
        for (String test : tests) {
            System.out.format("[%s]%n",
                test.replaceAll("^ +| +$| (?= )", "")
            );
        }

3voto

Ajinkya_M Punkte 71
String str = "  this is string   ";
str = str.replaceAll("\\s+", " ").trim();

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X