44

说我有字符串123456789。我知道我想替换字符串的索引 3-5。(4、5 和 6)。请记住,替换可能不是 3 个字符,我可能希望以123foobar789.

最好的方法是什么?

4

3 回答 3

50

试试下面的代码。在 StringBuffer 的帮助下,您可以进行替换。StringBuffer 替换 java 文档

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

演示

于 2013-02-01T09:34:07.447 回答
35

首先,你不能这样做1,因为 aString在java中是不可变的。

String#substring()但是,您可以使用以下方法(例如)创建具有所需值的新 String 对象:

String s = "123456789";
String newString = s.substring(0, 3) + "foobar" + s.substring(3+3);
System.out.println(newString);

如果您确实想有效地实现它,您可以避免创建一些由连接和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)无论如何都不容易,它可以通过反射来完成- 但应该避免。

于 2013-02-01T09:19:04.430 回答
13

如果给定子字符串没有重复,那么试试这个。

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());
于 2013-02-01T09:38:24.470 回答