StringBuilder替换方法像insert方法一样运行

Cra*_*ezz 3 java stringbuilder replace

我尝试StringBuilder使用该replace方法替换一些字符串,但不幸的是它像insert方法一样运行.

这是一些代码:

public class StringBuilderReplace {

    public static void main(String[] args) {
        StringBuilder builder = new StringBuilder();

        builder.append("Line 1\n");
        builder.append("Line 2\n");
        builder.append("Line 3\n");

        builder.replace(builder.indexOf("Line 2"), builder.indexOf("Line 2"), "Temporary Line\n");

        System.out.println(builder.toString());
    }
}
Run Code Online (Sandbox Code Playgroud)

此代码的结果:

Line 1
Temporary Line
Line 2
Line 3
Run Code Online (Sandbox Code Playgroud)

我想要的是:

Line 1
Temporary Line
Line 3
Run Code Online (Sandbox Code Playgroud)

怎么做才能得到我想要的结果?

根据AljoshaBre答案更新

如果我像这样更改代码,它可以工作:

builder.replace(builder.indexOf("Line 2"), builder.indexOf("Line 3"), "Temporary Line\n");
Run Code Online (Sandbox Code Playgroud)

但是出现了新问题,如果下一个字符串(对于这个例子Line 3)我不知道内容怎么办?

nul*_*ent 7

这是因为你得到"第2行"的索引作为起始索引,这是该行的开头,你对最后一个索引做同样的事情.

我认为你应该做以下事情:

public class StringBuilderReplace {
        public static void main(String[] args) {
            StringBuilder builder = new StringBuilder();

            builder.append("Line 1\n");
            builder.append("Line 2\n");
            builder.append("Line 3\n");

            String lineToReplace = "Line 1\n";
            int startIndex = builder.indexOf(lineToReplace);
            int lastIndex = startIndex + lineToReplace.length();

            builder.replace(startIndex, lastIndex, "Temporary Line\n");
            System.out.println(builder.toString());
        }
}
Run Code Online (Sandbox Code Playgroud)