replaceFirst("Vorgabe", "zu entfernendes Zeichen")

kodela

Bekanntes Mitglied
Hallo,

ich habe ein kleines "Progrämmchen" geschrieben, in dem von einem vorgegebenen Wort immer wieder ein Buchstabe entfernt wird. Die dafür zuständige Methode sieht so aus:
Java:
   /**
    * Entfernt eingegebenen Buchstaben aus der Kopie einer Vorgabe und soll verhindern, 
    * dass ein bereits einmal verwendeter Buchstabe aus der Vorlage noch einmal entfernt wird.
    * @param a char-Zeichen
    */
   public void entferneZeichen(char a) {
      String sa = Character.toString(a);
      testVorgabe = testVorgabe.replaceFirst(sa, "");
   }
Diese Methode hat einwandfrei funktioniert bis ich an dem Programm eine simple Änderung vornahm, die rein gar nichts mit obiger Methode zu tun hat. Nach dieser Änderung (eingegebene Wörter wurden durch eine Leerstelle getrennt und werden jetzt durch ein Komma plus Leerstelle getrennt) ersetzt replaceFirst(sa, "") nichts mehr. Mit Projektsicherungen aus der Zeit vor der erwähnen Änderung funktioniert alles so wie es soll.

Ich weiß, das klingt verrückt, so verrückt, dass ich Hemmungen hatte, dies hier zu schreiben, aber mir fällt nichts mehr ein, als zu einer Vorgängerversion zurück zu gehen und die letzte Änderung dort einzuarbeiten. Das halte ich auch für blöd.
 

mihe7

Top Contributor
Dazu müsste man wesentlich mehr sehen. Aber, mach doch einfach mal folgendes: setz Haltepunkte an den Stellen, an denen entferneZeichen aufgerufen wird. Starte den Debugger und schau Dir testVorgabe und den übergebenen Paramater genau an und prüfe nach dem Ausführungen von entferneZeichen den Spaß noch einmal.
 

Blender3D

Top Contributor
Diese Methode hat einwandfrei funktioniert bis ich an dem Programm eine simple Änderung vornahm, die rein gar nichts mit obiger Methode zu tun hat.
Also falls diese Änderung auf keinen Fall die Benutzung der Klassen Variable testVorgabe oder den übergebenen Parameter a betrifft, sollte sich am ursprünglichen Verhalten dieser Funktion auch nichts geändert haben.
Die Funktion entfernt das erste gefundene Zeichen aus der Klassen-Variable testVorgabe, falls es dort vorhanden ist.
Sie stellt aber auf keinen Fall sicher, dass bei einem erneuten Aufruf ein weiteres solches Zeichen noch einmal entfernt wird.
Somit ist die Hilfe deiner Funktion nicht richtig formuliert. Ich denke du machst das an einer anderen Stelle. Es ist eine öffentliche Funktion und kann daher beliebig von außen benutzt werden.
 

krgewb

Top Contributor
Wenn du alle Vorkommen ersetzen willst, musst du replace verwenden. Ich habe zuerst replaceAll verwendet, weil sie so klingt, als ob sie alle Vorkommen ersetzt, aber das war fatal. replaceAll nimmt nämlich einen Regex-String entgegen.

replace ist aber auch nicht trivial. Bestimmte Zeichen müssen nämlich anders geschrieben werden. Wenn du z. B. Gänsefüßchen ersetzten willst, musst du es so schreiben:
Java:
s = s.replace("\"", "");
 

krgewb

Top Contributor
Ein weiterer häufiger Fehler ist, dass man replace zwar aufruft, aber nicht speichert. Also z. B.
Java:
testVorgabe.replaceFirst(sa, "");
anstelle von
Java:
testVorgabe = testVorgabe.replaceFirst(sa, "");
Aber laut Beitrag #1 ist es bei dir bereits richtig.
 

kodela

Bekanntes Mitglied
Entschuldigt bitte mein Schweigen, aber ich war wirklich außer Gefecht gesetzt. Also hier die Lösung:

Java:
   public void entferneZeichen(char a) {
      String sa = Character.toString(a);
      testVorgabe = testVorgabe.replaceFirst(sa.toUpperCase(), "");
   }

Ganz einfach, ich hatte die Groß- und Kleinschreibung nicht berücksichtigt und dass das früher nicht auffiel, war reiner Zufall.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Sortieren nach Vorgabe Allgemeine Java-Themen 6

Ähnliche Java Themen


Oben