Suchen Sie nach einer schnellen und einfachen Möglichkeit in Java, diese Zeichenfolge zu ändern
" hello there "
zu etwas, das so aussieht
"hello there"
Dabei ersetze ich alle diese mehreren Leerzeichen durch ein einzelnes Leerzeichen, außer ich möchte auch, dass das eine oder die mehreren Leerzeichen am Anfang der Zeichenfolge weg sind.
So etwas bringt mich teilweise dorthin
String mytext = " hello there ";
mytext = mytext.replaceAll("( )+", " ");
aber nicht ganz.
Antworten:
Versuche dies:
Siehe auch
String.trim()
Kein
trim()
RegexEs ist auch möglich, dies mit nur einem zu tun
replaceAll
, aber dies ist viel weniger lesbar als dietrim()
Lösung. Trotzdem wird hier nur gezeigt, was Regex kann:Es gibt 3 Alternativen:
^_+
: eine beliebige Folge von Leerzeichen am Anfang der Zeichenfolge$1
, wodurch die leere Zeichenfolge erfasst wird_+$
: eine beliebige Folge von Leerzeichen am Ende der Zeichenfolge$1
, wodurch die leere Zeichenfolge erfasst wird(_)+
: Jede Folge von Leerzeichen, die mit keinem der oben genannten übereinstimmt, dh in der Mitte$1
, wodurch ein einzelnes Leerzeichen erfasst wirdSiehe auch
quelle
trim()
und dannreplaceAll()
weniger Speicher benötigt als umgekehrt. Nicht viel, aber wenn dies viele Male aufgerufen wird, kann es sich summieren, besonders wenn es viele "trimmbare Leerzeichen" gibt. (Trim()
Der zusätzliche Speicherplatz wird nicht wirklich entfernt - er wird nur durch Verschieben der Start- und Endwertechar[]
( ) +
oder( ){2,}
sollte ein (sehr) wenig effizienter sein;)\\s
ersetzen, wird jede Gruppe von Leerzeichen durch das gewünschte Zeichen ersetzt..trim().replaceAll(" +", " ")
(mit zwei Leerzeichen) schneller als.trim().replaceAll(" +", " ")
(mit einem Leerzeichen). Ich habe Timing-Tests für Zeichenfolgen durchgeführt, die nur einfache und alle doppelten Leerzeichen enthielten, und es kam für beide wesentlich schneller, wenn viele Operationen ausgeführt wurden (Millionen oder mehr, abhängig von der Umgebung).Sie brauchen nur ein:
Hier passen Sie ein oder mehrere Leerzeichen an und ersetzen sie durch ein einzelnes Leerzeichen. Schneiden Sie dann die Leerzeichen am Anfang und am Ende ab (Sie können sie tatsächlich umkehren, indem Sie sie zuerst zuschneiden und dann anpassen, um die Regex schneller zu machen, wie jemand betont hat).
Um dies schnell zu testen, versuchen Sie:
und es wird zurückkehren:
quelle
Verwenden Sie die Apache Commons-
StringUtils.normalizeSpace(String str)
Methode. Siehe Dokumente hierquelle
Das hat bei mir perfekt funktioniert:
sValue = sValue.trim().replaceAll("\\s+", " ");
quelle
Dies entspricht mehr als einem Leerzeichen.
AUSGABE:
quelle
Verwenden Sie die
String#trim()
Methode, um Leerzeichen am Anfang und am Ende des Strings zu entfernen. Und dann benutze deinemytext.replaceAll("( )+", " ")
.quelle
Sie können
String.trim()
den Befehl regex replace zuerst verwenden und dann auf das Ergebnis anwenden.quelle
Der folgende Code komprimiert Leerzeichen zwischen Wörtern und entfernt Leerzeichen am Anfang und Ende der Zeichenfolge
Dies wird ausgegeben
a string with many spaces, a tab and a newline
Beachten Sie, dass nicht druckbare Zeichen, einschließlich Leerzeichen, Tabulatoren und Zeilenumbrüche, komprimiert oder entfernt werden
Weitere Informationen finden Sie in der jeweiligen Dokumentation:
quelle
Probier diese.
Beispielcode
AUSGABE
Zuerst werden alle Leerzeichen durch ein einzelnes Leerzeichen ersetzt. Dann müssen wir das Trimmen durchführen,
String
da der Beginn desString
und des EndesString
den gesamten Raum durch einen einzelnen Raum ersetzt, wennString
am Anfang desString
und des Endes des Raums Leerzeichen vorhanden sind.String
Wir müssen sie also trimmen. Dann bekommen Sie Ihren WunschString
.quelle
Sie können auch Lookarounds verwenden.
ODER
<space>(?= )
Entspricht einem Leerzeichen, auf das ein weiteres Leerzeichen folgt. In aufeinanderfolgenden Leerzeichen würde es also mit allen Leerzeichen außer dem letzten übereinstimmen, da kein Leerzeichen folgt. Dadurch bleibt Ihnen nach dem Entfernungsvorgang ein einziges Leerzeichen für aufeinanderfolgende Leerzeichen.Beispiel:
quelle
trimmen()
Entfernt nur die führenden und nachfolgenden Leerzeichen.
In Java Doc heißt es: "Gibt eine Zeichenfolge zurück, deren Wert diese Zeichenfolge ist, wobei alle führenden und nachfolgenden Leerzeichen entfernt wurden."
"D ev Dum my"
replace (), replaceAll ()
Ersetzt alle leeren Zeichenfolgen im Wort.
Ausgabe:
Hinweis: "\ s +" ist der reguläre Ausdruck, der dem Leerzeichen ähnelt.
Referenz: https://www.codedjava.com/2018/06/replace-all-spaces-in-string-trim.html
quelle
Bisher wurden viele richtige Antworten gegeben, und ich sehe viele positive Stimmen. Die genannten Methoden funktionieren jedoch, sind jedoch nicht wirklich optimiert oder nicht wirklich lesbar. Ich bin kürzlich auf die Lösung gestoßen, die jedem Entwickler gefallen wird.
Du bist fertig. Dies ist eine lesbare Lösung.
quelle
In Kotlin würde es so aussehen
quelle
Leerzeichen zuerst reduzieren
Großschreibung des ersten Buchstabens und Kleinbuchstaben alles andere
quelle
Das hat bei mir funktioniert
Dabei folgt der Filter der Funktion und der Scan die Eingabezeichenfolge:
quelle
du solltest es so machen
+ in runde Klammern setzen.
quelle
quelle
quelle
Siehe
String.replaceAll
.Verwenden Sie den regulären Ausdruck
"\s"
und ersetzen Sie ihn durch" "
.Dann verwenden
String.trim
.quelle
new String(" hello there ").trim().replaceAll("\\s+", " ")
Überprüfen Sie dies...
Wenn String nur ein Leerzeichen enthält, wird replace () nicht ersetzt.
Wenn Leerzeichen mehr als eins sind, führt die Aktion replace () die Leerzeichen aus und entfernt sie.
Zählen der Anzahl der Leerzeichen in einem String.
Pattern .quote ("?") Gibt das Literalmuster String zurück.
quelle
Meine Methode, bevor ich die zweite Antwort mit Regex als bessere Lösung fand. Vielleicht braucht jemand diesen Code.
quelle
\s
reguläre Ausdrücke stehen (Leerzeichen, Tabulator, neue Zeile, Formular-Feed).Stream-Version, filtert Leerzeichen und Tabulatoren.
quelle
quelle
Die einfachste Methode zum Entfernen von Leerzeichen an einer beliebigen Stelle in der Zeichenfolge.
quelle
Die obige Lösung ist der Algorithmus mit der Komplexität von O (n) ohne Verwendung einer Java-Funktion.
quelle
Bitte verwenden Sie den folgenden Code
quelle
Hallo Entschuldigung für die Verzögerung! Hier ist die beste und effizienteste Antwort, die Sie suchen:
Ihre Ausgabe dieses Beispiels lautet also: Mein Name ist kingkon.
Diese Methode entfernt jedoch auch das "\ n", das Ihre Zeichenfolge möglicherweise hat. Wenn Sie das nicht möchten, verwenden Sie einfach diese einfache Methode:
Und wenn Sie auch die führenden und nachfolgenden Leerzeichen entfernen möchten, fügen Sie einfach Folgendes hinzu:
quelle
Ich weiß, dass die replaceAll-Methode viel einfacher ist, aber ich wollte dies auch posten.
quelle
quelle