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)我不知道内容怎么办?
这是因为你得到"第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)