group index is missing Error (Java)

NewKidInTown

Cadet 1st Year
Registriert
März 2021
Beiträge
12
Hallo zusammen,
bisher habe ich noch keine Erfahrungen mit der Methode replaceAll gemacht. Und prompt beim ersten Ausprobieren eine Fehlermeldung. Hier mal der Code (ich habe keine Codetags gefunden):

Java:
public static void gibDeinenTextEin() {
Scanner s = new Scanner(System.in);
System.out.println("Geben Sie hier den Text ein: ");

String text = s.next();
String replaceI = vertauscheBuchstaben(text);
System.out.println(text);
}

public static String vertauscheBuchstaben(String text) {

String replaceI = text.replaceAll("i","!");
String replaceS = text.replaceAll("s","$");


return replaceI;
}

Mir wird dann diese Fehlermeldung ausgegeben:
Illegal group reference: group index is missing

Was bedeutet das? Wie muss ich den Code verändern, dass es funktioniert?
Vielen Dank
 
Zuletzt bearbeitet:
Group Index ist ein Begriff der regulären Ausdrücke, er erkennt wahrscheinlich eins deiner Zeichen als Element eines regulären Ausdrucks, probier mal deine Ersatzzeichen zu escapen (mit \\).
 
  • Gefällt mir
Reaktionen: G00fY
Tornhoof schrieb:
probier mal deine Ersatzzeichen zu escapen (mit \\).
Habe ich probiert, klappt leider immer noch nicht :(

Java:
public static void gibDeinenTextEin() {


        Scanner s = new Scanner(System.in);


        System.out.println("Geben Sie hier den Text ein: ");


    


        String text = s.next();


        String replaceI = vertauscheBuchstaben(text);


        System.out.println(text);


    }


 


    public static String vertauscheBuchstaben(String text) {


    


        String replaceI = text.replaceAll("i","\\!");


        String replaceS = text.replaceAll("s","\\$");


    


    


        return replaceI;


    }

Nun wird mir genau der Text ausgegeben, den ich eingegeben habe. Also ohne Vertauschen.
 
Zuletzt bearbeitet:
Naja schau dir mal die Zuweisungen deiner ganzen Variablen an, da sollten dir diverse Probleme auffallen ;)
 
Probiers mal mit je einem Backslash. Zwei sind eigentlich eins zu viel.
Zur Erläuterung: Es gibt Steuerzeichen, dazu gehören bei RegExp auch "!" und "$". Mit dem Backslash kann man solche Steuerzeichen escapen, d.h. man sagt der RegExp-Engine, dass das folgende Zeichen eben kein Steuerzeichen ist. Mit einem doppelten Backslash escapest du jetzt aber nur das zweite Backslash, womit das darauf folgende Steuerzeichen wieder als Steuerzeichen gewertet wird.

E: Und das was Tornhoof sagt :D
 
NewKidInTown schrieb:
Hier mal der Code (ich habe keine Codetags gefunden):

Hier ist der Code-Tag:

1618767795452.png
 
Kannst du auch bei den obigen Beiträgen noch nachholen. Einfach auf "Bearbeiten" am Fuß des Beitrags klicken.
1618768879413.png
 
Strings sind immutable und replaceAll verändert nicht den String, auf dem es aufgerufen wird. Und das was Tornhoof sagt.
 
Also, das ist eine Übungsaufgabe, in der man bestimmte Zeichen in einem String austauschen soll, und zufällig... total zufällig... verursachen die Zeichen einen Fehler, wenn man sich für eine der Replace-Methoden entscheidet, die mit regulären Ausdrücken arbeiten?

Ich vermute, der Sinn der Übung ist RTFM:
https://docs.oracle.com/en/java/javase/16/docs/api/java.base/java/lang/String.html

Dort finden sich vier Methoden, deren Name mit "replace" beginnt, und eine ist die richtige Wahl. Nebenbei lernt man auch noch was über Overloading und den Unterschied zwischen String- und Char-Literals.
 
Zurück
Oben