java 在某些点更改字符串的字母

igsr9ssn  于 2023-02-07  发布在  Java
关注(0)|答案(4)|浏览(123)

我从键盘上得到一个字符串,我希望字符串中的每3个字母将原来的字母改为"X",但是我在执行这个算法时遇到了麻烦。
例如:如果我有字符串abcdefghij我必须返回字符串abXdeXfgXij或者如果我有hellokit字符串我需要返回heXloXit
到目前为止我已经做过了:

String ans = "";
String a = "abcdefghijk";
              
for (int j = 0; j < a.length(); j += 3) {
    ans += a.substring(j, j+2) + x;
}

但是它可能碰巧给出StringIndexOutOfBoundsException误差。
我怎样才能做到这一点而不导致错误?

7qhs6swi

7qhs6swi1#

这个对我来说很好用

String ans = "";
String a = "abcdefghij";
for(int i = 1; i<=a.length(); i++) {
    if(i%3==0) {
        ans += "X";
    } else {
        ans += a.charAt(i-1);
    }
}
System.out.println(ans);
pw9qyyiw

pw9qyyiw2#

字符串连接不是最佳工作,因为字符串在循环的每一步都被复制,考虑使用StringBuilder
要解决您的问题,只需迭代输入字符串的每个字符,并将每个字符复制到输出字符串构建器,除了每隔一个字符(索引i满足等式i % 3 == 2的字符)。
你会得到这样的结果:

String input = "abcdefghijk";
StringBuilder output = new StringBuilder();
for (int i = 0; i < input.length(); i++) {
    if (i % 3 == 2) {
        output.append("X");
    } else {
        output.append(input.charAt(i));
    }
}
String ans = output.toString();
s2j5cfk0

s2j5cfk03#

正则表达式更简单、使用时间更短:

String a     = "abcabcabcab";
String regex = "(..)(.)";
String ans   = a.replaceAll(regex,"$1X");

字符串不应该在循环中使用“+”连接。如果你想坚持这种方法,你应该只迭代到小于你输入长度的最大的3的倍数。如果你的输入长度不是3的倍数,你还需要在循环后追加可能没有追加的字符:

String a = "abcabcabcab";
String ans = "";

for (int j = 0; j < a.length() / 3 * 3; j += 3) {
    ans += a.substring(j, j+2) + 'X';
}

ans += a.substring(ans.length());
kqhtkvqz

kqhtkvqz4#

public static String replaceEvery3rdChar(String input) 
{
     StringBuilder result = new StringBuilder();
     for (int i = 0; i < input.length(); i++) 
     {
        if ((i + 1) % 3 == 0)
        {
          result.append("X");
        } 
        else
        {
          result.append(input.charAt(i));
        }
     }
     return result.toString();
  }

相关问题