String.replaceAll() funktioniert nicht richtig oder habe ich den falschen Regex??

Flashbaer

Mitglied
Hallo,

ich habe folgenden Code:
Java:
String testString = "a b c d e f g";
testString = testString.replaceAll("\\s+.\\s+", " ");
System.out.println(testString);

Eigentlich dachte ich, dass das Ergebnis "ag" sein müsste. Ist es aber nicht, sondern:
Code:
a c e g

Im JavaDoc steht, dass jeder Substring, der auf das gesuchte passt, ersetzt wird. Meiner Meinung nach hab ich das richtige gemacht.
Scheinbar sucht sich Java aber einen Substring, der passt, ersetzt, und fängt am Ende des Substrings dann wieder an zu suchen, womit der nächste Substring dann ja wieder nicht passt.

Kann ich den Regex irgendwie so hindrehen dass das gewünschte Ergebnis rauskommt? Ziel ist es, einzelene Buchstaben in einem Text zu löschen.

Viele Grüße
Flashbaer
 
Zuletzt bearbeitet:
das hier führt immerhin zu "a g" mit nur noch einem Leerzeichen
Java:
public class Test
{
    public static void main(String[] args) {
        String testString = "a b c d e f g";
        testString = testString.replaceAll("\\s+.(?=\\s+)", "");
        System.out.println(testString);
    }
}
das Leerzeichen hinten wird konsumiert,
das Leerzeichen nach vorne muss da sein, ist aber nicht Teil der aktuellen Gruppe, kann daher für den nächsten Match noch verwendet werden,
Folge ist dann aber, dass das letzte Leerzeichen nicht gelöscht wird..

Regex Tutorial - Lookahead and Lookbehind Zero-Width Assertions
 

Neue Themen


Zurück
Oben