Wieso wird der String nicht verändert (Java)?

... komplette Frage anzeigen

3 Antworten

Beim ersten gibt es gleich zwei Gründe, weshalb es nicht funktioniert.

  1. String.toCharArray() kopiert die Zeichen in ein char[]. Dieses ist nicht identisch mit dem String.
  2. "for (char c : array)" holt ein Zeichen aus dem Array in die Variable c. Diese ist vom Typ char. Das ist ein Wertetyp (kein Referenztyp). (Der Typ char ist ein 16-bit unsigned Integer.) Dorthin wird dann also das Zeichen kopiert. Wenn Du nun die Variable c veränderst, hat das natürlich keine Auswirkungen auf das Array. Du hast ja nur eine Zahl aus einem Array in eine Variable kopiert und anschließend den Inhalt dieser Variablen (die ja an sich nichts mit dem Array zu tun hat) verändert. Wenn Du ein Array verändern willst, musst Du es wie folgt machen.
for (int i = 0; i < array.Length; i++)
if (array[i] == '&')
array[i] == '§';

char[] ist ein Referenztyp, char ist ein Wertetyp. Wenn Du also array[i] einer Variablen c vom Typ char zuweist und dann c veränderst, veränderst Du nur den Wert in c, nicht den Wert im Array. Wenn Du array[i] etwas zuweist, veränderst Du den Wert im Array.

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von stevler
21.11.2015, 20:39

Ahh ok ja jetzt habe ich den Fehler auch gesehen xD ok dankeschön

1
Kommentar von NoHumanBeing
21.11.2015, 20:40

In der Zeile innerhalb der Schleife sollte natürlich ein Zuweisungsoperator ("=") stehen, kein Vergleichsoperator ("=="). Mein Fehler. ;-)

1

bei replace kannst du auch Strings übergeben (Vorsicht bei Sonderzeichen, da es bestimmte Codes für Gruppen und so gibt) z.B. "Haus H".replace("Hau", "Mau") ergibt "Maus H"

und toCharArray funktioniert nicht, da der String erst in ein Char Array umgewandelt wird, das aber nicht an der gleichen Stelle wie der String liegt

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von stevler
21.11.2015, 20:31

Ich weiß, dass man Strings übergeben kann und beim Array gehe ich halt ja eigtl alle Dimensionen durch also müsste es vom logischen gehen ?

1

Würde hier zwar schon alles irgendwo in einem Kommentar geschrieben, aber nochmal als direkte antwort: String.replace verändert den string nicht (ein String in Java ist sowieso unveränderlich), sondern gibt eine Kopie des strings mit den Änderungen aus. Diesen neuen String musst du dann deiner variable zuweisen. 

Das mit den chars bringt auch nichts. Die liest die chars in eine variable aus, änderst dann aber den Wert dieser variable, anstatt den Wert im Array anzupassen. 

Genau wegen solchem Situationen bin ich immer noch der Meinung, dass Programmiersprachen wie Java nicht geeignet sind, um mit dem programmieren anzufangen, weil dabei einfach kein Verständnis von pointern und so vermittelt wird. 

Antwort bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?