这是我提出的,但最后一个测试用例不起作用。有什么建议吗?
public class tester
{
public static String replaceAll(String a, String b, String c){
for(;;){
int i = a.indexOf(b);
if(i==-1){
break;
}
a = a.substring(0,i)+ c + a.substring(i + b.length());
}
return a;
}
public static void main(String args[]){
System.out.println(replaceAll("hello my friend, how are you?", "h", "y"));
System.out.println(replaceAll("CS221 is great!!","great","awesome"));
System.out.println(replaceAll("aaaa","a","aaa"));
}
}
答案 0 :(得分:0)
假设我正确地阅读您的代码:
因此字符串将无限增长。你可以考虑按插入文本的长度更新搜索索引,以确保你不会像这样爆炸你的字符串。
另外,如果您要进行大量字符串连接,我建议使用StringBuilder
来防止大量复制。
这就是说这样的事情应该有效:
public static String replaceAll(String a, String b, String c){
StringBuilder sb = new StringBuilder();
int i = 0;
while(i < a.length()){
int j = a.indexOf(b, i);
if(j == -1){
sb.append(a.substring(i, a.length()));
i = a.length();
} else {
sb.append(a.substring(i, j));
sb.append(c);
i = j + b.length();
}
}
return sb.toString();
}
编辑 - 添加了解决方案。