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 =newBufferedReader(newInputStreamReader(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 =newBufferedReader(newInputStreamReader(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);}}
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.
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
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.
Nein, tut es nicht. Nimm doch ein Blatt Papier und rechne es nach.
Generell wirst du mit deiner Idee kein erfolg haben. Replace ersetzt nicht ein eiziges Zeichen an einer Stelle, sondern alle Vorkommen dieses Zeichen.
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.
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:
// ...publicstaticvoidmain(String[] args){StringBuilder alt =newStringBuilder("");String wort ="";BufferedReader br =newBufferedReader(newInputStreamReader(System.in));try{
wort= br.readLine();for(int i =0; i < wort.length(); i++){
alt.append("_ ");}char buchstabe =0;BufferedReader br2 =newBufferedReader(newInputStreamReader(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. ;-)