Java-如何修改replacep占位符方法,使其不再具有mad libs程序的索引越界错误?

Java-如何修改replacep占位符方法,使其不再具有mad libs程序的索引越界错误?,java,string,placeholder,Java,String,Placeholder,问题已解决,下面的代码未更新 在一位有帮助的用户的帮助下,我解决了这段代码的问题。下面的代码未更新 // replacePlaceholder method private String replacePlaceholder(String template, String placeholder, String replacement) { String newTemplate = ""; int count = 0; fo

问题已解决,下面的代码未更新 在一位有帮助的用户的帮助下,我解决了这段代码的问题。下面的代码未更新

    // replacePlaceholder method
    private String replacePlaceholder(String template, String placeholder, String replacement)
    {
        String newTemplate = "";
        int count = 0;
        for(int i = 0; i < template.length(); i++)
        {
             if(count == 0 && template.substring(i, i + placeholder.length()).equals(placeholder))
            {
                newTemplate += replacement;
                count++;
            }
            else if(count != 1)
            {
                newTemplate += template.substring(i, i + 1);
            }
        }
        return newTemplate;
    }

正如注释所指出的,您应该只使用String.replaceString、String或String.replaceAllString、String,而不是自己编写。您当前的实施存在许多问题:

template.substringi,placeholder.length+1应为template.substringi,i+placeholder.length。否则,您的beginIndex可能大于endIndex。 若模板以半个占位符结尾,子字符串将失败,因为endIndex太大。 aaa[placeholder]aaa将与当前代码一起转换为AAAAreplacementPlaceholder]aaa,因为您不会跳过占位符的其余部分。 第二个占位符不会被替换,就像您说的count++一样,但永远不会重置它,使您的if始终转到其他位置。 可能更多
通过调试器,您将发现您自己消息告诉您试图在该字符串中使用无效的索引值。只需打印字符串和要使用的索引。然后修正产生数字的逻辑,如-1;-。。。或者通过观察来改进你的问题。这个方法到底应该做什么?如果您只需要替换另一个字符串中的子字符串,则可以使用replaceString占位符、字符串替换方法。该方法应将模板中的给定占位符替换为给定的替换字符串。解决了除aaa[占位符]之外的所有问题aaa将与当前代码一起转换为aaareplacementplaceholder]aaa,因为您不会跳过占位符的其余部分。另外,我只希望一次替换一个占位符,这就是为什么我的计数从未被重置。@mini23我明白了。也许您可以调用newTemplate+=template.substringi+placeHolder.length;打破添加替换后。那你就不需要计数了,明白了。我仍然坚持在不替换占位符的其余部分的情况下解决这个问题。@mini23发生这种情况是因为您继续循环模板的每个字符。这应该通过我上面写的内容来解决:一旦找到占位符,即在if->true块中,就应该附加替换项,从placeholder.length+1开始附加模板子字符串的其余部分,并中断循环,这将阻止添加占位符的其余部分。