java - 在java中使用charAt替换字符

标签 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);
            }
        }
    }

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

最佳答案

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();
}

关于java - 在java中使用charAt替换字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52745217/

相关文章:

java - 3D相机缩放并遵循java中的物理原理?

java - 使用stream()collect()groupingBy()和reducing()的多级映射

java - Spring @Autowire 没有通过 `mvn verify` 找到bean

java - Java 中的 ArrayList 对象

java - 没有应用层代码的请求接收时间戳

java - 如何使用 Mockito 测试 DAO 方法?

java - 如何使用 WebDriver 在 JavaScript 提示消息中写入?

java - 查询已存在的数据库返回空游标

java - 如何找到最长的回文(java)

java - 不能使用方法调用数组?