2

可能重复:
java.lang.String.replace 问题的提示?
在 Java 中使用 string.replace()

为什么“/”不被“_”代替?

public static void main(String[] args) throws IOException {
    String file = "A/B";
    file.replaceAll("/", "_");
    System.out.println(file);
}
4

6 回答 6

5

因为 的实例java.lang.String不可变的*replaceAll返回正确的字符串,但您的程序将其丢弃。按如下方式更改您的程序以更正该问题:

file = file.replaceAll("/", "_");


*这是“不可更改”的一种说法:一旦"A/B"创建了字符串实例,就没有任何方法可以调用它来更改该值。

于 2012-10-09T15:52:41.797 回答
3

您需要存储file.replaceAll()调用的结果,因为String实例是不可变的:

file = file.replaceAll("/", "_");
于 2012-10-09T15:52:33.127 回答
1

您必须分配 replaceAll 的结果:

public static void main(String[] args) throws IOException {
    String file = "A/B";
    String newFile = file.replaceAll("/", "_");
    System.out.println(newFile);
}
于 2012-10-09T15:54:41.250 回答
1
file.replaceAll("/", "_");

因为,Java 中的 String 是不可变的,所以String 类的任何方法,不仅仅是replaceAll,都不会修改现有的 String 。而是他们创建一个新的 String 并返回它。所以你应该将返回的字符串重新分配给file..

file = file.replaceAll("/", "_");
于 2012-10-09T15:54:44.687 回答
0

仔细查看String.replaceAll javadoc:它返回一个字符串。

像这样的方法不会修改它们的参数。所以你需要写:

String file = "A/B";
file = file.replaceAll("/", "_");
于 2012-10-09T15:55:25.983 回答
0

您应该阅读有关不可变属性的信息。

不可变属性

为什么字符串在许多编程语言中是不可变的?

于 2012-10-09T16:07:38.513 回答