在Java字符中使用charAt替换

时间:2018-10-10 16:52:55

标签: java

我正在尝试输入两个字符串,并且我正在检查第一字符串的任何字符是否等于第二字符串字符,然后将其替换为“ *” 我的代码是

for(int i=0;i<l;i++)
    {
        for(int j=0;j<l;j++)
        {
            if(s1.charAt(i) == s2.charAt(j))
            {
                char c=s2.charAt(j);
                c='*';
                System.out.println(s2);
            }
        }
    }

但是它没有被替换,我应该怎么做才能使代码正确运行?

1 个答案:

答案 0 :(得分:2)

String在Java中是不可变的。因此,要更改String中间的单个字符,您必须先将其拆分然后再加入:

String str = "abcde";
String newStr = str.substring(0, 2) + "_" + str.substring(3); // "ab_de"

通常,您不能更改字符串。所有修改都会创建(已修改)字符串。特别是,在循环中修改字符串是一种不好的做法。每次迭代都会得到一个新的字符串实例。

为解决您的问题,我提供将第二个字符串中的所有唯一字符收集到Set中,然后使用StringBuilder构建结果字符串:

public static String modify(String one, String two) {
    Set<Character> uniqueChars = new HashSet<>();

    for (int i = 0; i < two.length(); i++)
        uniqueChars.add(two.charAt(i));

    StringBuilder buf = new StringBuilder(one.length());

    for(int i = 0; i < one.length(); i++)
        buf.append(uniqueChars.contains(one.charAt(i)) ? '*' : one.charAt(i));

    return buf.toString();
}