# string.replace funktioniert nicht



## sdajfaw4890a (7. Mrz 2012)

hallo leute,
ich lese folgende zeile ein: @KnotenAnzahl = 3

mein code sieht folgendermaßen aus

```
if (zeile.contains("@KnotenAnzahl = ")) {
                            System.out.println(zeile);
                            zeile.replace("@KnotenAnzahl = ", "");
                            System.out.println(zeile);
                            this.knotenAnzahl = Integer.parseInt(zeile);
                        }
```

bei beiden sysos bekomme ich das ausgegeben: @KnotenAnzahl = 3


----------



## Gossi (7. Mrz 2012)

```
zeile.replace("@KnotenAnzahl = ", "");
//ist verkehrt, so müsste es aussehen
zeile = zeile.replace("@KnotenAnzahl = ", "");
```


----------



## AngryDeveloper (7. Mrz 2012)

Strings sind immutable (unveränderbar). Du bekommst bei replace also ein neues String Objekt zurück.
Versuche es mit:
zeile = zeile.replace...


----------



## ARadauer (7. Mrz 2012)

> string.replace funktioniert nicht


doch ;-) du verwendest es falsch... naja is ein häufiger anfänger fehler... denk dir nix.

Strings sind in java nicht veränderbar. replace verändert den string nicht, sondern gibt das neue ergebnis zurück ...
zeile = zeile.replace("@KnotenAnzahl = ", "");


----------



## bone2 (7. Mrz 2012)

die bösen strings in java, die so tun als wären sie echte objekte, es irgendwie aber nicht sind 
einfach nochmal das string kapitel im lehrbuch angucken


bzw:
Galileo Computing :: Java ist auch eine Insel – 4.2 Strings und deren Anwendung


----------



## SlaterB (7. Mrz 2012)

unveränderliche Objekte, die bei Methoden eine (veränderte) Kopie zurückgeben, 
sind aber je nach Programmiersichtweise alles andere als 'böse', sondern erfreulicher Vorteil,

BigDecimal etwa reagiert genauso, darauf sollte man schon bewußt achten


----------



## bygones (7. Mrz 2012)

vor allem warum sind sie keine echten objekte ?!


----------



## hüteüberhüte (7. Mrz 2012)

...es sind schon Objekte, die aber keine Methoden beinhalten, die deren Attribute ändern. Außerdem noch ist die Klasse final und damit nicht erwiterbar


----------



## bone2 (7. Mrz 2012)

bygones hat gesagt.:


> vor allem warum sind sie keine echten objekte ?!


hab ich so nicht geschrieben



SlaterB hat gesagt.:


> sondern erfreulicher Vorteil,


exakt, glaube der smiley kam nicht so an wie gedacht...

man muss einfach wissen, das sich ein string in ein paar punkten vom durchschnittsobjekt unterscheidet
alles nachzulesen in der insel s.o.


----------



## SlaterB (7. Mrz 2012)

> hab ich so nicht geschrieben

"die so tun als wären sie echte objekte, es irgendwie aber nicht sind " == "sind keine echten objekte"
doch


----------



## bone2 (7. Mrz 2012)

>.> ach man
kanns nich mehr editieren um es so zu formulieren, das alle glücklich sind

was gemeint war ist doch wohl offensichtlich und der insel link korrigiert sowieso was auch immer ich vorher schreibe!



> *String: Eine Klasse mit bevorzugter Behandlung*
> 
> Die Entwickler von Java haben eine Symbiose zwischen dem String als Objekt und dem String als eingebautem Datentyp vorgenommen. Die Sprache ermöglicht zwar die direkte Konstruktion von String-Objekten etwa aus String-Literalen (Zeichenketten in doppelten Anführungszeichen) und die Konkatenation (Aneinanderreihung von Strings mit +) von mehreren Strings, doch intern ist die Aneinanderreihung über Methoden der Klassen String, StringBuilder beziehungsweise StringBuffer realisiert. Mit dem Plus auf String-Objekten ist also ein besonderer Operator auf der Klasse String definiert, der nicht eigenständig auf anderen Klassen definiert werden kann. Java unterstützt keine überladenen Operatoren für Klassen, und dieses Plus ist ein Abweichler.


----------

