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