# Zeichenketten verwalten und bearbeiten (mit Arrays)



## 3vilrine (27. Nov 2019)

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



Hier mein kläglicher Versuch das Buchstaben durch einen anderen ersetzt werden:

```
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:


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 (27. Nov 2019)

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

Sprich, folgender Code ist falsch:

```
if ((eingabe >= 'a' && eingabe <= 'z') || (eingabe >= 'A' && eingabe <= 'Z') && i == 0) {
```
Der ist äquivalent zu:

```
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 (27. Nov 2019)

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:


Danke für die schnelle Antwort @LimDul


----------

