Java - String ersetzt genaues Wort

8
%Vor%

Mit diesem Code versuche ich, das genaue Wort axe durch sword zu ersetzen. Wenn ich dies jedoch ausführe, druckt es sword picksword , während ich nur sword pickaxe drucken möchte, da pickaxe ein anderes Wort von axe ist, obwohl es es enthält. Wie kann ich das beheben? Danke

    
Oti Na Nai 12.05.2015, 06:54
quelle

6 Antworten

21

Verwenden Sie einen Regex mit Wortgrenzen \b :

%Vor%

Der umgekehrte Schrägstrich vom Begrenzungssymbol muss mit Escapezeichen versehen werden, daher Doppel-Backslashes.

    
hiergiltdiestfu 12.05.2015, 06:58
quelle
11

Fügen Sie die Wortgrenze vor und nach dem Wort ein, das Sie ersetzen möchten.

%Vor%

Bearbeiten Ausgabe

%Vor%     
SubOptimal 12.05.2015 06:58
quelle
4

Einige andere Antworten schlagen Ihnen vor, \b Wortgrenzen zu verwenden, um ein exaktes Wort zu finden. Aber \bfoo\b würde der Teilzeichenfolge foo in .foo. entsprechen. Wenn Sie diese Art von Verhalten nicht möchten, dann sollten Sie Lookaround-basierte Regex verwenden.

%Vor%

Erläuterung:

  • (?<!\S) Negativer Lookbehind, der vorgibt, dass der Übereinstimmung kein Leerzeichen vorangestellt wird. h. der Übereinstimmung muss der Anfang der Liniengrenze oder ein Leerzeichen vorausgehen.

  • (?!\S) Negatives Lookahead, das bestätigt, dass auf die Übereinstimmung kein Leerzeichen folgt, d. h. auf die Übereinstimmung muss das Ende der Liniengrenze oder des Zeilenabstands folgen. Wir können (?<=^|\s)axe(?=\s|$) nicht verwenden, da Java Look-Behind-Assertionen mit variabler Länge nicht unterstützt.

DEMO

    
Avinash Raj 12.05.2015 07:03
quelle
2
%Vor%

Sie müssen replaceAll anstelle von replace verwenden - weil es mit regulären Ausdrücken arbeiten kann. Verwenden Sie dann das Meta-Zeichen \ b, das für die Wortgrenze steht. Um es zu benutzen, musst du das \ as double \ entschlüsseln, damit die reges zu \baxe\b

werden     
Veselin Davidov 12.05.2015 06:59
quelle
1

Sie können \b verwenden, um die Wortgrenze zu definieren, also in diesem Fall \baxe\b .

%Vor%     
Steve Chaloner 12.05.2015 06:59
quelle
0

Wenn Sie nur das erste Vorkommen ersetzen möchten, gibt es eine Methode replaceFirst in String object.

%Vor%     
Alvin Magalona 12.05.2015 07:05
quelle

Tags und Links