Arrays an replaceAll-Methode übergeben

drei_und_20

Mitglied
Guten Abend.

Ich stehe vor folgendem Problem: In der Aufgabe sollen einzelne Buchstaben aus einem String durch Zeichenketten ersetzt werden. Übergeben werden sollen diese als Array - z.B. so:

Java:
String zeichenAlt[] = {"x", "y", "z"};
String zeichenNeu[] = {"123", "234", "345"};

Ich hatte folgende Idee (ziel ist dabei ein String und quelle auch (quelle wurde vorher initialisiert)).

Code:
public void dateiUmwandeln(String[] zeichenAlt, String[] zeichenNeu) {
                   
           ziel = quelle.replaceAll(zeichenAlt[zeichenAlt.length-1], zeichenNeu[zeichenNeu.length-1]);
                
           }

Nur leider ist der ziel-String dann derselbe wie die quelle. Hat jemand eine Idee wo da mein Denkfehler liegt?

Vielen Dank schonmal für die Hilfe.
 
Was auffällt ist, dass Du nur das letzte Element ersetzt. Also nur die "z" würde durch "345" ersetzt.

Ansonsten musst Du aufpassen - der erste Parameter ist ein regulärer Ausdruck. Da werden bestimmte Zeichen also auch besonders ausgewertet.

Ansonsten auch mal schauen, wo und wie Du ziel deklariert hast. Und was in quelle drin ist und in Deinen Parametern. Die Ersetzung selbst sollte Funktionieren. Ein abcxyxz".replaceAll("x", "123") ergibt das erwartete "abc123y123z".
 
Java:
public class Konverter {
    private final String quelle;
    private String ziel;

    public Konverter(String quelle) { this.quelle = quelle; }

    public void konvertiere(String[] zeichenAlt, String[] zeichenNeu) {
        ziel = quelle.replaceAll(zeichenAlt[zeichenAlt.length-1], zeichenNeu[zeichenNeu.length-1]);
    }

    public String getZiel() { return ziel; }
}

Java:
public class Test {
    private final String[] zeichenAlt = {"x","y","z"};
    private final String[] zeichenNeu = {"123", "456", "789"};

    public void einfacherTest() {
        pruefe("abz", "ab789");
        pruefe("zab", "789ab");
        pruefe("abx", "ab123");
    }

    private void pruefe(String quelle, String erwartet) {
        Konverter k = new Konverter(quelle);
        k.konvertiere(zeichenAlt, zeichenNeu);
        String ergebnis = k.getZiel();
        if (erwartet.equals(ergebnis)) {
            System.out.println("Ergebnis ist wie erwartet " + ergebnis);
        } else {
            System.out.println("Erwartet: " + erwartet + ", Ergebnis ist aber " + ergebnis);
        }
    }

    public static void main(String[] args) {
         new Test().einfacherTest();
    }
}

Ergebnis:
Code:
Ergebnis ist wie erwartet ab789
Ergebnis ist wie erwartet 789ab
Erwartet: ab123, Ergebnis ist aber abx
 
Was auffällt ist, dass Du nur das letzte Element ersetzt. Also nur die "z" würde durch "345" ersetzt.

Ansonsten musst Du aufpassen - der erste Parameter ist ein regulärer Ausdruck. Da werden bestimmte Zeichen also auch besonders ausgewertet.

Ansonsten auch mal schauen, wo und wie Du ziel deklariert hast. Und was in quelle drin ist und in Deinen Parametern. Die Ersetzung selbst sollte Funktionieren. Ein abcxyxz".replaceAll("x", "123") ergibt das erwartete "abc123y123z".
Vielen Dank für die schnelle Antwort.
Gäbe es denn eine Möglichkeit alle Zeichen auf einmal zu ersetzen?
 
Wie wäre es, in einer Schleife einfach alle Ersetzungen nacheinander zu machen?
auch mit
Java:
  public void dateiUmwandeln(String[] zeichenAlt, String[] zeichenNeu) {             
        for (int i=0; i< zeichenAlt.length; i++) {
        ziel = quelle.replaceAll(zeichenAlt[i], zeichenNeu[i]);
        }     
  }
klappt es leider nicht. Habe wohl irgendwo einen Denkfehler...
 
Du musst mit einer lokalen Variablen arbeiten.

Die wird erst auf die Quelle gesetzt.
in der Schleife wird diese immer verändert.

nach der Schleife ist das Ziel die lokale Variable.

Alternativ machst du es direkt mit der ziel Variablen.
 
Java:
public void dateiUmwandeln(String[] zeichenAlt, String[] zeichenNeu) {
        
        String temp = quelle;
        
        for (int i=0; i< zeichenAlt.length; i++) {
        ziel = temp.replaceAll(zeichenAlt[i], zeichenNeu[i]);
        }
}

?? Damit habe ich immernoch dasselbe Problem. Tut mir leid, ich bin kompletter Anfänger...
 
In der Schleife muss stehen:
Java:
temp = temp.replaceAll(zeichenAlt[i], zeichenNeu[i]);
und danach weist Du temp einfach der Variablen ziel zu.
 
Java:
 public void dateiUmwandeln(String[] zeichenAlt, String[] zeichenNeu) {
        
        String temp = quelle;
        
        for (int i=0; i< zeichenAlt.length; i++) {
        temp = temp.replaceAll(zeichenAlt[i], zeichenNeu[i]);
        
        }
        this.ziel = temp;
        }

Auch damit bleiben quelle und ziel gleich 🙁
 
Ich habe das Problem gefunden. Beim Einlesen meiner Quelle funktioniert die UTF-8-Codierung anscheinend nicht, so dass die Zeichen die ich ersetzen wollte gar nicht enthalten sind. Dann versuch ich mal diese Problem zu lösen...Vielen Dank für die Geduld
 

Zurück
Oben