Java 将字符串1替换为第二个字符串的实例remove,并替换为第三个字符串,而不使用replaceAll

Java 将字符串1替换为第二个字符串的实例remove,并替换为第三个字符串,而不使用replaceAll,java,string,replace,Java,String,Replace,这是我想到的,但是最后一个测试用例不起作用。有什么建议吗 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.subst

这是我想到的,但是最后一个测试用例不起作用。有什么建议吗

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

假设我正确阅读了您的代码:

  • 在“aaaa”中寻求“a”。在索引0处找到它
  • 将“aaa”添加到“aaaa”的开头,生成“aaaaaaa”
  • 在“AAAAA”中寻求“a”。在索引0处找到它
  • 将“aaa”添加到“AAAAA”中,产生“AAAAA”。
  • 因此,这条线将无限期地增长。您可以根据插入文本的长度来更新搜索索引,以确保不会像这样分解字符串

    另外,如果要进行大量字符串连接,我建议使用
    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();
    }
    
    公共静态字符串replaceAll(字符串a、字符串b、字符串c){
    StringBuilder sb=新的StringBuilder();
    int i=0;
    而(i

    编辑-添加的解决方案。

    它应该做的是读取第一个字符串,然后读取第一个“a”,并用三个a替换。然后再做三次。因此,对于replaceAll的最后一个方法调用(“aaaa”、“a”、“aaa”)。它应该打印为“aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa。对于这三种情况,它看起来不错,但可能并不完全正确。有没有一种方法可以在不使用StringBuilder的情况下编写此代码。我们还没有在课堂上复习过StringBuilders。否则,您可以解释它,以便我理解.append方法在做什么。再次感谢您的帮助。
    StringBuilder
    基本上执行字符串连接,而不会复制整个字符串。您可以将其视为在内存中保存字符串列表,并且仅在调用
    toString()
    时才将它们连接在一起。因此,您只需启动一个临时字符串,并在使用
    +
    时将其附加到该字符串中,然后在末尾将其作为输出返回。