2009-02-03 31 views

Antwort

21

'*' bedeutet null oder mehr Übereinstimmungen des vorherigen Zeichens. So wird jeder leere String durch ein "e" ersetzt.

Sie wollen wahrscheinlich stattdessen '+' verwenden:

replaceAll("B+", "e")

+0

99% richtig ... es ist eine gierige Suche, also wenn es "B" zusammenbringen kann, wird es. Sonst wäre die Ausgabe "eee1e2e3e" – user54650

+0

Das erklärt nicht das ':' in der Ausgabe, obwohl ... – luiscubal

+0

Das ':' ist wahrscheinlich ein Copy-Paste-Fehler, der mitgelieferte Code kann kein ' : '... –

7

Sie diese für Ihr Muster wollen:

B+ 

Und Ihr Code wäre:

String result = "B123".replaceAll("B+","e"); 
System.out.println(result); 

Das "*" entspricht "Null oder mehr" - und "Null" enthält das Nichts, das vor dem B ist, sowie zwischen allen anderen Zeichen.

+0

Whups, danke Paul! : D –

+0

Beim ersten Versuch verbraucht die Regex das 'B', keine leere Zeichenkette. Dann stimmt es mit der leeren Zeichenfolge an jeder Position überein, beginnend an der Position, an der die erste Übereinstimmung abgebrochen wurde. –

1

Ich verbrachte über einen Monat bei einer großen Tech-Firma, die einen Bug mit * (splat!) In regulären Ausdrücken reparierte. Wir haben ein wenig bekanntes UNIX-Betriebssystem beibehalten. Mein Kopf explodierte fast, weil er ZERO-Vorkommen einer Begegnung mit einem Charakter entspricht. Sprechen Sie über einen harten Bug, den Sie durch Ihre eigenen Nachbildungen verstehen können. Wir waren in einigen Fällen doppelt substituierend. Ich konnte nicht herausfinden, warum der Code falsch war, aber ich konnte Code hinzufügen, der den speziellen (falschen) Fall auffing und Double Subbing verhinderte und keine der Utilities, die ihn beinhalteten (einschließlich sed und awk), kaputt machte. Ich war stolz darauf, diesen Fehler behoben zu haben, aber wie bereits erwähnt.

Um Gottes willen, verwenden Sie einfach + !!!!

+0

Ja, das Doppel-Match-Ding ist ziemlich bizarr. Es warf mich ein paar Mal, bevor ich lernte, darauf zu achten. Und ein +1 für immer + anstelle von * wenn du kannst. –

Verwandte Themen