java.lang.String.replace 问题的提示? [复制]

Posted

技术标签:

【中文标题】java.lang.String.replace 问题的提示? [复制]【英文标题】:Hints for java.lang.String.replace problem? [duplicate] 【发布时间】:2010-11-13 02:33:43 【问题描述】:

我想替换“。”通过“,”在我想写入文件的字符串/双精度数中。

使用以下 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);

我得到以下输出

38.1882352941176
38.1882352941176
38.1882352941176
38.1882352941176

为什么不替换做它应该做的事情?我希望最后两行包含一个“,”。

我必须做/使用其他东西吗?有什么建议吗?

【问题讨论】:

这些年来,这让很多 Java 新手感到困惑。 我已经重新阅读了替换文档,它显然以“返回一个新字符串...”开头;-) 【参考方案1】:

您需要将新值分配回变量。

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

【讨论】:

像往常一样,问题出在电脑前 ;-) 谢谢 它返回一个新字符串的原因是字符串在Java中是不可变的。【参考方案2】:

原始字符串未被修改。该调用返回修改后的字符串,因此您需要这样做:

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

【讨论】:

【参考方案3】:

replace 返回一个新字符串(因为 String 在 Java 中是不可变的):

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

【讨论】:

但是你不必引入newString,因为虽然String对象是不可变的,但是对String对象的引用是可以改变的(如果它们不是final):***.com/questions/1552301/…跨度> 【参考方案4】:

永远记住,字符串是不可变的。他们无法改变。如果您正在调用以某种方式更改它的 String 方法,则需要存储返回值。总是。

我记得在 Uni 不止一次被这个问题抓住了 :)

【讨论】:

【参考方案5】:

更大的问题是为什么不使用DecimalFormat 而不是进行字符串替换?

【讨论】:

非常好!您的回答超出了我的问题,但解决了我本质上遇到的问题。我不知道 DecimalFormat,谢谢!

以上是关于java.lang.String.replace 问题的提示? [复制]的主要内容,如果未能解决你的问题,请参考以下文章