Подтвердить что ты не робот

Заменить часть строки между индексами в Java

Скажем, у меня есть строка 123456789. Я знаю, что хочу заменить индексы 3-5 строки. (4, 5 и 6). Имейте в виду, что замена, вероятно, не 3 символа, мне может понадобиться 123foobar789.

Какой лучший способ сделать это?

4b9b3361

Ответ 1

Во-первых, вы не можете сделать это 1 так как a String является неизменным в java.

Однако вы можете создать новый объект String с нужным значением, используя метод String#substring():

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) не так легко, это можно сделать с помощью отражения - но этого следует избегать.

Ответ 2

Попробуйте ввести код ниже. С помощью StringBuffer вы делаете замену. StringBuffer заменить 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

Демо

Ответ 3

Если повторения данной подстроки нет, попробуйте это.

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());