2009-07-22 8 views
15

Vorrei sostituire "." da "," in una stringa/doppio che voglio scrivere su un file.Suggerimenti per il problema java.lang.String.replace?

utilizzando il seguente codice Java

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); 

ottengo il seguente output

38.1882352941176 
38.1882352941176 
38.1882352941176 
38.1882352941176 

Perché non è sostituire facendo quello che dovrebbe fare? Mi aspetto che le ultime due righe contengano un ",".

Devo fare/usare qualcos'altro? Suggerimenti?

+5

Questo ha fatto inciampare così tanti principianti Java nel corso degli anni. –

+2

Ho riletto i documenti di sostituzione e inizia chiaramente con "Restituisce una nuova stringa ..." ;-) – CL23

risposta

20

È necessario assegnare il nuovo valore alla variabile.

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

Come al solito il problema si trova davanti al computer ;-) Thx – CL23

+6

Il motivo per cui viene restituito un nuovo la stringa è che le stringhe sono immutabili in Java. – Powerlord

+1

PEBKAC - Esiste un problema tra la tastiera e la poltrona. :-P –

11

La stringa originale non è stata modificata. La chiamata restituisce la stringa modificata, così avresti bisogno di fare questo:

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

replacerestituisce una nuova stringa (dal String è immutabile in Java):

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

Ma non è necessario introdurre 'newString', perché anche se gli oggetti' String' sono immutabili, i riferimenti agli oggetti 'String' possono essere modificati (se non sono' final'): http://stackoverflow.com/questions/1552301/immutability-of-strings-in-java – Raedwald

3

Ricordate sempre, Archi sono immutabili Non possono cambiare. Se si chiama un metodo String che lo modifica in qualche modo, è necessario memorizzare il valore restituito. Sempre.

Mi ricordo sempre alla sprovvista da questo più che un paio di volte a Uni :)

10

La domanda più importante è perché non utilizzare DecimalFormat invece di fare Stringa di sostituire?

+0

Ottimo punto! La tua risposta va oltre la mia domanda, ma risolve il problema che essenzialmente avevo. Non conoscevo DecimalFormat, grazie! – CL23

Problemi correlati