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

时间:2012-05-24 10:47:12

标签: java replace stringbuilder

我尝试使用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)我不知道内容怎么办?

2 个答案:

答案 0 :(得分: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());
        }
}

答案 1 :(得分:2)

final String toReplace = "Line 2\n";
final int start = builder.indexOf(toReplace);
builder.replace(start, start+toReplace.length(), "Temporary Line\n");