2009-07-22 11 views
15

Me gustaría reemplazar "." por "," en una Cadena/doble que quiero escribir en un archivo.Sugerencias para el problema java.lang.String.replace?

Usando el siguiente código 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); 

me da el siguiente resultado

38.1882352941176 
38.1882352941176 
38.1882352941176 
38.1882352941176 

¿Por qué no es reemplazar haciendo lo que se supone que debe hacer? Espero que las últimas dos líneas contengan un ",".

¿Tengo que hacer/usar algo más? Sugerencias?

+5

Esto ha hecho tropezar a tantos principiantes de Java a lo largo de los años. –

+2

He vuelto a leer los documentos de reemplazo y claramente comienza con "Devuelve una nueva cadena ..." ;-) – CL23

Respuesta

20

Debe volver a asignar el nuevo valor a 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

Como de costumbre, el problema se encuentra frente a la computadora ;-) Thx – CL23

+6

La razón por la que devuelve un nuevo string es que las cadenas son inmutables en Java. – Powerlord

+1

PEBKAC - Existe un problema entre el teclado y la silla. :-P –

11

La secuencia original no se está modificando. La llamada devuelve la cadena modificada, por lo que había necesidad de hacer esto:

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

replacedevuelve una nueva cadena (ya que es inmutable cadena en Java):

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

Pero no es necesario que introduzca 'newString', porque aunque los objetos' String' son inmutables, las referencias a los objetos 'String' se pueden cambiar (si no son' finales'): http://stackoverflow.com/questions/1552301/inmutability-of-strings-in-java – Raedwald

3

Siempre recuerda, Cuerdas son inmutables Ellos no pueden cambiar Si llama a un método String que lo cambia de alguna manera, debe almacenar el valor devuelto. Siempre.

Recuerdo que me atrapen con esto más que un par de veces en la UNI :)

10

La gran pregunta es por qué no utilizar DecimalFormat en lugar de hacer cadena de reemplazo?

+0

¡Muy buen punto! Su respuesta va más allá de mi pregunta, pero resuelve el problema que esencialmente tuve. No sabía DecimalFormat, gracias! – CL23

Cuestiones relacionadas