我从键盘上得到一个字符串,我希望字符串中的每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
误差。
我怎样才能做到这一点而不导致错误?
4条答案
按热度按时间7qhs6swi1#
这个对我来说很好用
pw9qyyiw2#
字符串连接不是最佳工作,因为字符串在循环的每一步都被复制,考虑使用
StringBuilder
。要解决您的问题,只需迭代输入字符串的每个字符,并将每个字符复制到输出字符串构建器,除了每隔一个字符(索引
i
满足等式i % 3 == 2
的字符)。你会得到这样的结果:
s2j5cfk03#
正则表达式更简单、使用时间更短:
字符串不应该在循环中使用“+”连接。如果你想坚持这种方法,你应该只迭代到小于你输入长度的最大的3的倍数。如果你的输入长度不是3的倍数,你还需要在循环后追加可能没有追加的字符:
kqhtkvqz4#