我正在尝试浏览一个字符数组,并用另一个数组中的并行字符替换字符串中的那个字符。
private String replace(String input)
{
char[] first = {'a','e','o','s'};
char[] second = {'@','3','0','$'};
String myCopy = input.toLowerCase();
for(int y = 0; y < first.length; y++)
{
myCopy.replace(first[y],second[y]);
}
return myCopy;
}
以下是我得到的例子:
Enter a string: as the dog runs here
Output: as the dog runs here
它总是输出相同的字符串而没有替换。
我也尝试过使用:
myCopy.replace('a','@');
and
myCopy.replace("a","@");
和replaceAll方法。
有什么建议吗?
答案 0 :(得分:12)
字符串在Java中是不可变的。 replace()
不会更改您调用它的字符串 - 返回带有更改的新字符串。所以你想要:
myCopy = myCopy.replace(first[y], second[y]);
(所有 String
上的方法也是如此,它们“似乎”正在改变它,因为它是不可变的。)
答案 1 :(得分:5)
String.replace()将返回一个新字符串。字符串在java中是不可变的。
您正在寻找的可能是StringBuilder。您可以从string构建它,只要您需要更改它,然后通过toSting()生成一个不可变的String。
答案 2 :(得分:0)
字符串是不可变的。因此,在你的for循环中,你的操作没有任何实际效果。您需要将replace
的结果分配回原始变量:
for(int y = 0; y < first.length; y++) {
myCopy = myCopy.replace(first[y],second[y]);
}
答案 3 :(得分:0)
这不起作用的原因是您没有将返回的String值分配给数组。这个:
for(int y = 0; y < first.length; y++)
{
myCopy.replace(first[y],second[y]);
}
需要成为:
for(int y = 0; y < first.length; y++)
{
myCopy = myCopy.replace(first[y],second[y]);
}
答案 4 :(得分:0)
您对String
和replace()
感到困惑。字符串是不可变的,即您无法更改其状态。调用replace()
会创建源字符串的副本并将其返回。做这样的事情:
String replacedString = myCopy.replace(first[y],second[y]);
答案 5 :(得分:0)
正如Michal所说,字符串是不可改变的。如果在更密集的进程中使用它,则可能需要使用StringBuffer。 StringBuffer是可变的,但它需要一些额外的工作,因为它没有可直接比较的replace()
方法。