无法替换字符串中的字符

时间:2012-03-19 15:22:55

标签: java

我正在尝试浏览一个字符数组,并用另一个数组中的并行字符替换字符串中的那个字符。

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方法。

有什么建议吗?

6 个答案:

答案 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)

您对Stringreplace()感到困惑。字符串是不可变的,即您无法更改其状态。调用replace()会创建源字符串的副本并将其返回。做这样的事情:

String replacedString = myCopy.replace(first[y],second[y]);

答案 5 :(得分:0)

正如Michal所说,字符串是不可改变的。如果在更密集的进程中使用它,则可能需要使用StringBuffer。 StringBuffer是可变的,但它需要一些额外的工作,因为它没有可直接比较的replace()方法。

相关问题