我正在尝试输入两个字符串,并且我正在检查第一字符串的任何字符是否等于第二字符串字符,然后将其替换为“ *” 我的代码是
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);
}
}
}
但是它没有被替换,我应该怎么做才能使代码正确运行?
答案 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();
}