Zeichenketten verwalten und bearbeiten (mit Arrays)

3vilrine

Mitglied
Hallo, ich bräuchte Hilfe für folgende Aufgabe:

12677

Hier mein kläglicher Versuch das Buchstaben durch einen anderen ersetzt werden:
Java:
import java.io.IOException;

public class CharArrayProcessing {
    public static void main(String[] args) throws IOException {

        final int max = 100;
        char[] pufferArray = new char[max]; // pufferArray für Eingabespeicher in pufferArray

        System.out.println("Zeichenkette von bis zu " + max + " Zeichen eingeben und mit <return> abschliessen");

        char c;
        int counter = 0;
        for (int i = 0; i < pufferArray.length; i++) {
            c = (char) System.in.read();
            if (c == '\r' || c == '\n') {
                break;
            }
            counter++;
            pufferArray[i] = c;
        }

        char[] ausgabeArray = new char[counter]; // AusgabeArray für gekürztes Array
        for (int i = 0; i < ausgabeArray.length; i++) {
            ausgabeArray[i] = pufferArray[i];
        }
        ////////////////////////////////////////
        for (char ch : ausgabeArray) {
            System.out.print(ch); // Testausgabe (ob array gekürzt auf eingabe?)
        }
        ////////////////////////////////////////
        System.in.read();

        // Teil für Eingabeüberprüfung und Tauschen
        System.out.println("\nWelche Zeichen sollen getauscht werden ? Beispieleingabe: a->b");
        char suche = 0;
        char ersetze = 0;
        for (int i = 0; i < 4; i++) {
            char eingabe = (char) System.in.read();
            if ((eingabe >= 'a' && eingabe <= 'z') || (eingabe >= 'A' && eingabe <= 'Z') && i == 0) {
                suche = eingabe;
            } else if (eingabe == '-' && i == 1) {
            } else if (eingabe == '>' && i == 2) {
            } else if ((eingabe >= 'a' && eingabe <= 'z') || (eingabe >= 'A' && eingabe <= 'Z') && i == 3) {
                ersetze = eingabe;
            } else {
                System.out.println("Fehlerhafte Eingabe");
                break;
            }
        }
        // Tauschen von Buchstaben
        for (int count = 0; count < ausgabeArray.length; count++) {
            if (ausgabeArray[count] == suche) {
            ausgabeArray[count] = ersetze;   
            }
                
                
        }
        for (int e = 0; e < ausgabeArray.length; e++) {
            
            System.out.print(ausgabeArray[e]);
            //System.out.println(ausgabeArray.length);
            
        }
    
        
    
    }
}

Das ist die Ausgabe von der Konsole mit einem Beispiel:
12678

Er tauscht mir hier halt nicht 'a' mit 'b', sondern löscht 'b' und 'a' steht wo es vorher auch stand.
Ich komme nicht darauf wo der Fehler liegt.
Die Ausgabe sollte ja so aussehen (bei dem Beispiel): bababa ?
Und das soll für jede beliebige Eingabe des Nutzers funktionieren (für Buchstaben).
Ich wäre für jede Hilfe dankbar. mfg
 

LimDul

Top Contributor
Bei deinen If Bedingungen fehlen Klammern, der Und-Operator bindet stärker als der Oder Operator.

Sprich, folgender Code ist falsch:
Code:
            if ((eingabe >= 'a' && eingabe <= 'z') || (eingabe >= 'A' && eingabe <= 'Z') && i == 0) {
Der ist äquivalent zu:
Code:
            if ((eingabe >= 'a' && eingabe <= 'z') 
            || (  (eingabe >= 'A' && eingabe <= 'Z') && i == 0)) {

Sprich, die Bedingung ist immer wahr, wenn die Eingabe im Bereich a bis z liegt. Das führt dazu, dass bei deiner Eingabe das suche durch das b überschrieben wird und das ersetze nie gesetzt wird.
 

3vilrine

Mitglied
Wow jetzt geht es. Mir ist auch noch aufgefallen das ich geschrieben habe "getauscht werden soll", das sollte eigentlich ersetzt heißen, da ich ja nichts tausche sondern Buchstaben ersetze.
So siehts jetzt zumindest aus:
12679

Danke für die schnelle Antwort @LimDul
 

Neue Themen


Oben