replace(char, char) funktioniert nicht

it-girl

Aktives Mitglied
Hallo zusammen,

habe ein wahrscheinlich ganz banales Problem.
Ich lese einen String von der Console ein und speichere ihn in String wort. Dann durchlaufe ich diesen String und erstelle für jeden vorhandenen Buchstaben "_ ". Also wenn ich "hallo" schreibe, kommt _ _ _ _ _ raus. So, nun möchte ich aber, wenn ein eingelesener Buchstabe in wort vorkommt, dass er an der gleichen Stelle in den Unterstrichen ersetzt wird.
Als Beispiel: Ich schreibe "hallo". Es wird "_ _ _ _ _ "daraus generiert. Jetzt gebe ich ein "a" ein und es soll rauskommen "_ a _ _ _ ".

Eigentlich geht das doch so:
Java:
String alt = "";
String wort = "";
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
try {
	wort= br.readLine();
} catch (IOException e) {
	System.err.println("IO-Fehler!");
}
for (int i = 0; i < wort.length(); i++) {
	alt += "_ ";
}
char buchstabe = 0;
BufferedReader br2 = new BufferedReader(new InputStreamReader(System.in));
buchstabe = (char) br2.read();
for (int i = 0; i < wort.length(); i++) {
	if (wort.charAt(i) == buchstabe) {
		alt.replace(alt.charAt(i+1), buchstabe);
	}
}
Aber hier wird nix ersetzt. Was mache ich falsch?

Danke schon mal für eure Antworten.

LG it-girl
 
Zuletzt bearbeitet:
Darüber hinaus hast du irgendwie mal
Code:
wort
mal
Code:
gesuchtesWort
stehen. Wie kommt dieser
Code:
i+1
Index zur Stande? Was denkst du passiert da? Du ersetzt ja in dem Wort "_ _ _ _ _" den Unterstrich durch einen Buchstaben... ALLE Unterstriche.
 
Darüber hinaus hast du irgendwie mal
Code:
wort
mal
Code:
gesuchtesWort
stehen.
Danke für den Hinweis, sollte wort heißen 🙂 Habs geändert.

Wie kommt dieser
Code:
i+1
Index zur Stande?
i+1 deshalb, weil in alt ja steht "_ _ _ _ _ ", also immer Unterstrich Leerzeichen. Und damit nur die Unterstriche, nicht aber die Leerzeichen ersetzt werden ist das +1 da.

Was denkst du passiert da? Du ersetzt ja in dem Wort "_ _ _ _ _" den Unterstrich durch einen Buchstaben... ALLE Unterstriche.
Ja und genau das will ich vermeiden, nur weiß ich grad nicht wie... Könntest du mir das bitte sagen? Ich brüte schon zu lang darüber als dass ich meine eigenen Fehler noch bemerken würde 🙁
 
Ich denke, hier würde es mehr Sinn machen, mit dem StringBuilder zu arbeiten.
Und da speziell mit der Methode .setCharAt(int index, char c).

Das mit dem Index+1 dürfte meiner Meinung nach so nicht passen.
Da würde ich noch mal nachrechnen. ;-)

VG ROlf
 
Ich denke, hier würde es mehr Sinn machen, mit dem StringBuilder zu arbeiten.
Und da speziell mit der Methode .setCharAt(int index, char c).
Kannst du mir genau sagen, wie ich das machen muss? Hab das schonmal versucht, aber dann passt es wieder an anderen Stellen nicht. Vor allem beim Einlesen von der Console hab ich dann Probleme, denn ich lese ja keine Strings, sondern chars ein.

Das mit dem Index+1 dürfte meiner Meinung nach so nicht passen.
Da würde ich noch mal nachrechnen. ;-)
Doch das passt, das habe ich schon berechnet 🙂
 
Code:
_ _ _ _ _
012345678

nun möchtest du den Index 2 austauschen:

Code:
_ _ a _ _
012345678

2+1 wäre 3. Das a steht aber an Position 2*i.
 
Kannst du mir genau sagen, wie ich das machen muss? Hab das schonmal versucht, aber dann passt es wieder an anderen Stellen nicht. Vor allem beim Einlesen von der Console hab ich dann Probleme, denn ich lese ja keine Strings, sondern chars ein.


Doch das passt, das habe ich schon berechnet 🙂

Nee, das passt nicht (siehe unten)! ;-)


Ich hab mal an Hand Deines Codes dieses Beispiel mit dem StringBuilder erstellt.
Vielleicht noch nicht optimal, aber ich hab zum besseren Vergleich versucht, die
Änderungen so gering wie möglich zu halten.
Java:
// ...

   public static void main(String[] args) {
      StringBuilder alt = new StringBuilder("");
      String wort = "";

      BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
      try {

         wort= br.readLine();
         for (int i = 0; i < wort.length(); i++) {
            alt.append("_ ");
         }

         char buchstabe = 0;
         BufferedReader br2 = new BufferedReader(new InputStreamReader(System.in));
         buchstabe = (char) br2.read();

         for (int i = 0; i < wort.length(); i++) {
            if (wort.charAt(i) == buchstabe) {
               alt.setCharAt(i*2, buchstabe);
            }
         }
         System.out.println("Wort: " + wort);
         System.out.println("Alt.: " + alt.toString());


      } catch (IOException e) {
          System.err.println("IO-Fehler!");
      }
   }

// ...

Um mehrere Zeichen hintereinander eingeben zu können
brauchst Du natürlich noch eine Schleife. ;-)


Ich hoffe, das hilft Dir weiter.

VG ROlf
 

Zurück
Oben