在Java中的索引之间替换字符串的一部分

JJJ*_*jim 32 java string

说我有字符串123456789.我知道我想替换字符串3-5的索引.(4,5和6).请记住,替换可能不是3个字符,我可能想最终得到123foobar789.

最好的方法是什么?

ami*_*mit 31

首先,你不能这样做1,因为a String在java中是不可变的.

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

String s = "123456789";
String newString = s.substring(0, 3) + "foobar" + s.substring(3+3);
System.out.println(newString);
Run Code Online (Sandbox Code Playgroud)

如果你想要有效地实现它,你可以避免创建一些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());
Run Code Online (Sandbox Code Playgroud)

但是,如果它不是在一个非常紧凑的循环中完成的 - 你应该忽略它,并坚持使用第一个更易读的解决方案.


(1)反正不容易,可以用反射来完成- 但应该避免.

  • 问题是如何*可以*,而不是如何*有效*.它是实现它的最可读*方法,除非这是在一个非常紧凑的循环中完成的 - 没有必要针对不太可读和更高效的东西进行优化. (4认同)
  • 如何建议`StringBuffer.replace` (3认同)

小智 31

试试下面的代码.在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);

    }

}
Run Code Online (Sandbox Code Playgroud)

运行以上程序后将出局.

123foobar789
Run Code Online (Sandbox Code Playgroud)

演示


Ach*_*Jha 12

如果没有重复给定的子串,那么试试这个.

String s ="123456789";
s = s.replace(s.substring(3,6), "foobar");
Run Code Online (Sandbox Code Playgroud)

如果有重复的给定子串,那么试试这个.

String s ="123123123";
s= s.substring(0,3) + "foobar" + s.substring(6,s.length());
Run Code Online (Sandbox Code Playgroud)

  • 它仅解决了示例输入的问题.`s ="123123123"会发生什么? (2认同)