Hilfe beim löschen schon Buchstaben.

ivad

Neues Mitglied
Kann mir bitte jemand helfen, wir haben eine solche Aufgabe bekommen und ich weiß überhaupt nicht was ich machen soll 🙁

Verwenden Sie StringBuilder , um von einem eingegebenen String nacheinander die Zeichen
an einer eingegebenen Position zu entfernen. Dies endet, wenn der Rest-String leer ist, oder eine
negative Postion eingegeben wird. Abgabe : Eine Datei Wegdamit.java . Beispiel:

String eingeben (Return zum Beenden): Hallo Wendy!
Position zum Loeschen (-1 bis Ende): 5
Aktueller String: HalloWendy!
Position zum Loeschen (-1 bis Ende): 0
Aktueller String: alloWendy!
Position zum Loeschen (-1 bis Ende): 9
Aktueller String: alloWendy
Position zum Loeschen (-1 bis Ende): -1
Finaler String: alloWendy
String eingeben (Return zum Beenden):
Ciao!

Schonmal Danke
 
Java:
public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String in = sc.nextLine();
       
        String out = wegDamit(in);
        System.out.println("Final: " + out);
    }

    private static String wegDamit(String in) {
        StringBuilder  stringBuilder = new StringBuilder(in);
        Scanner sc = new Scanner(System.in);
        System.out.println("Positionen -1 bis "+(in.length()-1));
        int n = sc.nextInt();
        while (n >= 0 && !in.isEmpty()){
            stringBuilder.deleteCharAt(n);
            System.out.println("Positionen -1 bis "+(stringBuilder.length()-1));
            in = stringBuilder.toString();
            System.out.println("Aktuell: "+ in);
            n = sc.nextInt();

        }
       
        return in;
    }
Irgendwie so hab das jetzt nicht auf Herz und Nieren geprüft!
 
@prise1993 bei deinem Quellcode wird der TE spätestens bei der 2. Eingabe einer Zahl ein Problem bekommen.
Ein bekanntest Problem von sc.nextInt() ist, dass er die Zahl einliest und das "\n" nicht. Durch den Overflow laded die Escapesequence dann in dem neuen sc.nextInt() und dadurch wird dann eine Exception gewurfen. Man sollte die ganzen sc.nextFoo() Methoden vermeiden und lieber mit sc.nextLine() arbeiten und den Input entsprechend umwandeln.
Beispiel:
Java:
int input = Integer.parseInt(sc.nextLine());

Gruß
Robert
 
@Robat wirklich hat bei mir jetzt einwandfrei funktioniert?! Aber danke für den Tipp werde mir das nochmal näher anschauen. Hab das nämlich eigentlich so gelernt wie du sagst 😀

Edit: hab mir das jetzt näher angeschaut vom Ausführen her ist es kein Problem so wie ich das oben geschrieben habe. nextInt(); fängt den Fehler mit \n ab. Performancetechnisch ist es halt ein graus. Fazit: in Schleifen Integer.parseInt(myscanner.nextLine()); verwenden. Danke für den Denkanstoß
 
Jupp da hast du recht. Wenn du irgendwo dazwischen ein sc.nextLine() rufen würdest, dann würde der Fehler auftreten. Dann würde der "\n" automatisch in das sc.nextLine() gehen.

Das würde dann passieren, wenn du das Programm so gemacht hättest, dass er solange einen neuen String eingeben kann, bis der String leer ist. (so wie es mMn. auch in der Aufgabe steht.)

Da du ja jetzt schon einen Lösungsvorschlag gebracht hsat, hier einfach mal meiner 😛

Java:
public static void main(String[] args)
{
    
        StringBuilder builder;
        Scanner s = new Scanner(System.in);
        System.out.print("String eingeben (Return zum Beenden):");
        String str;
       
        while(!((str = s.nextLine()).isEmpty()))
        {
             builder = new StringBuilder(str);
             int pos;
             
             System.out.print("Position zum Löschen(-1 bis Ende): ");
             
             while((pos = Integer.parseInt(s.nextLine())) >= 0)
             {
                builder.deleteCharAt(pos);
                if((builder.toString().length()) <= 0)
                    break;
               
                System.out.println("Aktueller String: " + builder.toString());
                System.out.print("Position zum Löschen(-1 bis Ende): ");
            }
             
             System.out.println("Finaler String: " + builder.toString());
             System.out.print("String eingeben (Return zum Beenden):");
        }
       
        System.out.println("Ciao");
}
 

Zurück
Oben