3

我尝试在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());
    }
}

此代码的结果:

Line 1
Temporary Line
Line 2
Line 3

我想要的是:

Line 1
Temporary Line
Line 3

如何做到这一点以获得我想要的结果?

基于 AljoshaBre 答案的更新

如果我像这样更改代码,它会起作用:

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

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

4

2 回答 2

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());
        }
}
于 2012-05-24T10:49:12.350 回答
2
final String toReplace = "Line 2\n";
final int start = builder.indexOf(toReplace);
builder.replace(start, start+toReplace.length(), "Temporary Line\n");
于 2012-05-24T10:54:27.027 回答