2016-11-26 2 views
1

Ниже моя строка переменной:Заменить подстроку в определенном положении в строке в Java

String str = "Home(om), Home(gia)"; 

Я хочу заменить подстроку om присутствует между () с tom.

Я могу найти индекс (), в котором om присутствует, но следующий не будет работать:

int i1 = str.indexOf("("); 
int i2 = str.indexOf(")"); 

str = str.replace(str.substring(i1+1,i2),"tom"); 

Я требую результат как Home(tom), Home(gia).

Как это сделать?

+0

whar ожидается выход? – Mritunjay

+0

Каковы другие потенциальные входы/выходы? Непонятно, что именно вы хотите, чтобы этот код выполнялся с другой 'str'. – qxz

ответ

2

Я бы не использовать любой replace() метод, если вы знаете, индексы подстроки, которую требуется заменить. Проблема заключается в том, что это заявление:

str = str.replace(str.substring(someIndex, someOtherIndex), replacement); 

сначала вычисляет подстроку, а затем заменяет все вхождения этой подстроки в исходной строке. replace не знает или не заботится об исходных индексах.

Это лучше просто разбить строку, используя substring():

int i1 = str.indexOf("("); 
int i2 = str.indexOf(")"); 

str = str.substring(0, i1+1) + "tom" + str.substring(i2); 
1

Вы можете использовать регулярное выражение с replaceAll

String str = "Home(om)"; 

str = str.replaceAll("[(].*[)]", "(tom)"); 
System.out.println(str); 

Выход:

Home (Том)

[(]: ищите (

.*: захватить все Exce пт разрыв строки означают \n\r

[)]: ищите )

UPDATE:

Вы можете использовать replaceFirst с не жадным квантором ?

String str = "Home(om), Home(gia)"; 

    str = str.replaceFirst("([(](.*?)[)])", "(tom)"); 
    System.out.println(str); 

Выход:

Home (TOM), Home (Гия)

+0

Но это не будет работать в случае 'String str =" Home (om), Home (gia) ";'. Это даст мне результат «Главная (tom), Home (tom)».Мне нужно «Home (tom), Home (gia)» – parul71625

+0

@ seno71625 Я согласен, но я думал, что вы сказали «Я требую результата в форме Home (tom).» Любым способом дайте мне попробовать –

+0

@ seno71625 Ваш вопрос бит неясен ... Если вы «требуете» «Home (tom), Home (gia)», то я могу это сделать: 'return 'Home (tom), Home (gia)"; ' – qxz

Смежные вопросы