Was ist der Unterschied zwischen den folgenden beiden Ausdrücken?
x = x.replaceAll("\\s", "");
x = x.replaceAll("\\s+", "");
java
regex
string
quantifiers
mpluse
quelle
quelle
Antworten:
Das erste entspricht einem einzelnen Leerzeichen, während das zweite einem oder mehreren Leerzeichen entspricht. Sie sind die sogenannten Quantifizierer für reguläre Ausdrücke und führen Übereinstimmungen wie diese durch (entnommen aus der Dokumentation ):
quelle
Diese beiden
replaceAll
Aufrufe führen immer zum gleichen Ergebnis, unabhängig davon, was esx
ist. Es ist jedoch wichtig zu beachten, dass die beiden regulären Ausdrücke nicht identisch sind:\\s
- Entspricht einem einzelnen Leerzeichen\\s+
- Entspricht der Reihenfolge eines oder mehrerer Leerzeichen.In diesem Fall macht es keinen Unterschied, da Sie alles durch eine leere Zeichenfolge ersetzen (obwohl es
\\s+
aus Effizienzgründen besser wäre, sie zu verwenden ). Wenn Sie durch eine nicht leere Zeichenfolge ersetzen würden, würden sich die beiden unterschiedlich verhalten.quelle
Zunächst müssen Sie verstehen, dass die endgültige Ausgabe beider Anweisungen identisch ist, dh um alle Leerzeichen aus der angegebenen Zeichenfolge zu entfernen.
Dies
x.replaceAll("\\s+", "");
ist jedoch eine effizientere Methode zum Trimmen von Leerzeichen (wenn die Zeichenfolge mehrere zusammenhängende Leerzeichen enthalten kann), da möglicherweise weniger Ersetzungen erforderlich sind, da Regex\\s+
mit einem oder mehreren Leerzeichen gleichzeitig übereinstimmt und diese durch leere Zeichenfolgen ersetzt.Obwohl Sie von beiden die gleiche Ausgabe erhalten, ist es besser, Folgendes zu verwenden:
quelle
Der erste reguläre Ausdruck entspricht einem Leerzeichen. Die zweite Regex stimmt nur ungern mit einem oder mehreren Leerzeichen überein. Für die meisten Zwecke sind diese beiden regulären Ausdrücke sehr ähnlich, außer im zweiten Fall kann der reguläre Ausdruck mehr mit der Zeichenfolge übereinstimmen, wenn dadurch verhindert wird, dass die reguläre Übereinstimmung fehlschlägt. von http://www.coderanch.com/t/570917/java/java/regex-difference
quelle
\s+
nicht um\s+?
diese andere Frage.