2014-09-11 2 views
3

Я работаю в Java, и я хочу принять следующую строку:Заменить повторяющуюся подстроку в строке

String sample = "This is a sample string for replacement string with other string"; 

И я хочу, чтобы заменить вторую «строку» с «это гораздо больше, строки», после того, как некоторые java magic будет выглядеть следующим образом:

System.out.println(sample); 
"This is a sample string for replacement this is a much larger string with other string" 

У меня есть смещение, где начинается текст. В этом случае 40 и текст заменяются «string».

Я мог бы сделать:

int offset = 40; 
String sample = "This is a sample string for replacement string with other string"; 
String replace = "string"; 
String replacement = "this is a much larger string"; 

String firstpart = sample.substring(0, offset); 
String secondpart = sample.substring(offset + replace.length(), sample.length()); 
String finalString = firstpart + replacement + secondpart; 
System.out.println(finalString); 
"This is a sample string for replacement this is a much larger string with other string" 

но есть лучший способ сделать это другим, то с помощью функции подстроки Java?

EDIT -

Текст «строка» будет в строке образца, по крайней мере один раз, но может быть в том, что текст много раз, что смещение будет диктовать, который один заменяется (не всегда второй). Поэтому строка, которую нужно заменить, всегда совпадает со строкой.

+0

Вы просто пытаетесь эффективно сделать «Это образец строка для замены это гораздо больше, строка с другой строкой» или вы ищете способ заменить конкретный экземпляр «string» в неизвестной строке? – Theopile

+1

Чтобы решить проблему «Замените символы _M_, начиная со смещения _N_ исходной строки с заменой строки», я бы сказал, нет - нет лучшего способа, чем «подстрока», о которой я знаю. Если в Apache Commons или какой-либо другой сторонней библиотеке нет чего-либо. – ajb

ответ

2

Использование перегружен версии IndexOf(), который принимает исходные Indes в качестве 2-го параметра:

str.indexOf("string", str.indexOf("string") + 1); 

Чтобы получить индекс строки 2 ..., а затем заменить его с этим смещением ... Надеюсь, это помогает.

1

Вы можете использовать

str.indexOf("string", str.indexOf("string") + 1); 

вместо смещенного, и по-прежнему использовать подстроку, чтобы заменить его.

+0

Lol очень приятно !! –

2

Попробуйте следующее:

sample.replaceAll("(.*?)(string)(.*?)(string)(.+)", "$1$2$3this is a much larger string$5"); 

$1 обозначает первую группу захваченной внутри скобок в первом аргументе.

2

Одним из способов вы можете сделать это ..

String s = "This is a sample string for replacement string with other string"; 
String r = s.replaceAll("^(.*?string.*?)string", "$1this is a much larger string"); 
//=> "This is a sample string for replacement this is a much larger string with other string" 
Смежные вопросы