2009-07-22 4 views
15

Ich möchte "." durch "," in einer Zeichenfolge/Doppel, die ich in eine Datei schreiben möchte.Hinweise für java.lang.String.replace Problem?

Mit dem folgenden Java-Code

double myDouble = myObject.getDoubleMethod(); // returns 38.1882352941176 
System.out.println(myDouble); 

String myDoubleString = "" + myDouble; 
System.out.println(myDoubleString); 

myDoubleString.replace(".", ","); 
System.out.println(myDoubleString); 

myDoubleString.replace('.', ','); 
System.out.println(myDoubleString); 

ich die folgende Ausgabe

38.1882352941176 
38.1882352941176 
38.1882352941176 
38.1882352941176 

Warum nicht tun, ist zu ersetzen, was es tun soll? Ich erwarte, dass die letzten zwei Zeilen ein "," enthalten.

Muss ich etwas anderes tun/verwenden? Vorschläge?

+5

Dies hat im Laufe der Jahre sooo viele Java-Neulinge stolperte. –

+2

Ich habe die docs von replace nochmals gelesen und es beginnt eindeutig mit "Gibt eine neue Zeichenkette zurück ..." ;-) – CL23

Antwort

20

Sie müssen der Variable den neuen Wert zurück zuweisen.

double myDouble = myObject.getDoubleMethod(); // returns 38.1882352941176 
System.out.println(myDouble); 

String myDoubleString = "" + myDouble; 
System.out.println(myDoubleString); 

myDoubleString = myDoubleString.replace(".", ","); 
System.out.println(myDoubleString); 

myDoubleString = myDoubleString.replace('.', ','); 
System.out.println(myDoubleString); 
+4

Wie üblich sitzt das Problem vor dem Computer ;-) Thx – CL23

+6

Der Grund, warum es ein neues zurückgibt String ist, dass Strings in Java unveränderlich sind. – Powerlord

+1

PEBKAC - Problem existiert zwischen Tastatur und Stuhl. :-P –

11

Der ursprüngliche String wird nicht geändert. Der Aufruf gibt die geänderte Zeichenfolge, so können Sie dies tun müssen, würde:

String modded = myDoubleString.replace(".",","); 
System.out.println(modded); 
5

replacegibt einen neuen String (seit String unveränderlich in Java ist):

String newString = myDoubleString.replace(".", ","); 
+0

Aber Sie müssen 'newString' nicht einführen, denn obwohl' String' Objekte unveränderlich sind, können Verweise auf 'String' Objekte geändert werden (wenn sie nicht' final' sind): http://stackoverflow.com/questions/1552301/unveränderlich-von-strings-in-java – Raedwald

3

Denken Sie immer daran, Streicher sind unveränderlich. Sie können sich nicht ändern. Wenn Sie eine String-Methode aufrufen, die sie auf irgendeine Weise ändert, müssen Sie den Rückgabewert speichern. Immer.

Ich erinnere mich immer mit diesem gefangen mehr als ein paar Mal an der Uni :)

10

Die größere Frage ist, warum nicht DecimalFormat verwenden anstatt das zu tun String ersetzen?

+0

Sehr guter Punkt! Deine Antwort geht über meine Frage hinaus, löst aber das Problem, das ich im Wesentlichen hatte. Ich kannte DecimalFormat nicht, danke! – CL23

Verwandte Themen