繁体   English   中英

无法替换字符串中的字符

[英]Unable to replace characters in a String

我试图通过一个字符数组并用另一个数组中的并行字符替换字符串中的字符。

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

有什么建议么?

字符串在Java中是不可变的。 replace()不会更改您调用它的字符串 - 它返回带有更改的新字符串。 所以你要:

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

(对于String 所有方法都是如此,“看起来”会改变它,因为它是不可变的。)

String.replace()将返回一个新字符串。 字符串在java中是不可变的。

您正在寻找的可能是StringBuilder 您可以从string构建它,只要您需要更改它,然后通过toSting()生成一个不可变的String作为结果。

字符串是不可变的。 因此,在你的for循环中,你的操作没有任何实际效果。 您需要将replace结果分配回原始变量:

for(int y = 0; y < first.length; y++) {
    myCopy = myCopy.replace(first[y],second[y]);
}

这不起作用的原因是您没有将返回的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]); 
    }

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM