2009-07-22 6 views
15

Je voudrais remplacer "." par "," dans une chaîne/double que je veux écrire dans un fichier.Des astuces pour le problème java.lang.String.replace?

En utilisant le code Java suivant

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

je reçois la sortie suivante

38.1882352941176 
38.1882352941176 
38.1882352941176 
38.1882352941176 

Pourquoi remplacer ne pas faire ce qu'il est censé faire? Je m'attends à ce que les deux dernières lignes contiennent un ",".

Dois-je faire/utiliser autre chose? Suggestions?

+5

Cela a trébuché tellement de newbies Java au cours des années. –

+2

J'ai relu les documents de remplacement et il commence clairement avec "Renvoie une nouvelle chaîne ..." ;-) – CL23

Répondre

20

Vous devez attribuer la nouvelle valeur à la variable.

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

Comme d'habitude le problème se trouve devant l'ordinateur ;-) Thx – CL23

+6

La raison pour laquelle il renvoie un nouveau chaîne est que les chaînes sont immuables en Java. – Powerlord

+1

PEBKAC - Problème existant entre le clavier et la chaise. :-P –

11

La chaîne d'origine n'est pas en cours de modification. L'appel renvoie la chaîne modifiée, de sorte que vous auriez besoin de le faire:

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

replacerenvoie une nouvelle chaîne (depuis chaîne est immuable en Java):

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

Mais vous n'avez pas besoin d'introduire 'newString', car bien que les objets' String' soient immuables, les références aux objets 'String' peuvent être changées (si elles ne sont pas' final'): http://stackoverflow.com/questions/1552301/immutability-of-strings-in-java – Raedwald

3

Rappelez-vous toujours, Cordes sont immuables. Ils ne peuvent pas changer. Si vous appelez une méthode String qui la modifie d'une manière ou d'une autre, vous devez stocker la valeur de retour. Toujours.

Je me souviens avoir pris avec ce que quelques fois à Uni :)

10

La grande question est pourquoi ne pas utiliser DecimalFormat au lieu de faire remplacer cordes?

+0

Très bon point! Votre réponse va au-delà de ma question, mais résout le problème que j'avais essentiellement. Je ne connaissais pas DecimalFormat, merci! – CL23

Questions connexes