说我有字符串123456789
。我知道我想替换字符串3-5的索引。 (4,5和6)。请记住,替换可能不是3个字符,我可能希望最终得到123foobar789
。
最好的方法是什么?
答案 0 :(得分:31)
首先,你不能这样做 1 ,因为String
在java中是不可变的。
但是,您可以使用String#substring()
方法(例如)创建具有所需值的新String对象:
String s = "123456789";
String newString = s.substring(0, 3) + "foobar" + s.substring(3+3);
System.out.println(newString);
如果您确实希望有效地实现它,则可以避免创建concatinating和substring()
方法使用的某些中间字符串。
String s = "123456789";
StringBuilder sb = new StringBuilder();
char[] buff = s.toCharArray();
sb.append(buff , 0, 3).append("foobar");
sb.append(buff,3+3,buff.length -(3+3));
System.out.println(sb.toString());
但是,如果不是在一个非常紧凑的循环中完成 - 你应该忽略它,并坚持使用第一个更易读的解决方案。
(1)不管怎么说都不容易,可以用reflection完成 - 但应该避免。
答案 1 :(得分:28)
尝试以下代码。在StringBuffer的帮助下,您可以进行替换。 StringBuffer replace java docs
public static void main(String[] args) {
StringBuffer buf = new StringBuffer("123456789");
int start = 3;
int end = 6;
buf.replace(start, end, "foobar");
System.out.println(buf);
}
}
运行以上程序后,将会输出。
123foobar789
答案 2 :(得分:12)
如果没有重复给定的子串,那么试试这个。
String s ="123456789";
s = s.replace(s.substring(3,6), "foobar");
如果重复给定的子串,那么试试这个。
String s ="123123123";
s= s.substring(0,3) + "foobar" + s.substring(6,s.length());