2016-11-26 56 views
1

替換在特定位置上的子以下是我的字符串變量:在字符串中的Java

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

我想tom更換()之間的串om存在。

我能找到的()指數在om存在,但下面將不起作用:

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

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

我需要的結果作爲Home(tom), Home(gia)

如何做到這一點?

+0

? – 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); 

輸出:

首頁(TOM)

[(]:尋找(

.*:捕獲所有EXCE PT斷線的意思\n\r

[)]:尋找)

UPDATE:

您可以使用replaceFirst與非貪婪量詞?

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

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

輸出:

首頁(TOM),家庭(GIA)

+0

但是,如果字符串str =「Home(om),Home(gia)」;',這不起作用。它會給我結果'家(湯姆),家(湯姆)'。我需要'家(湯姆),家(蓋亞)' – parul71625

+0

@ seno71625我同意,但我想你說'我需要結果的形式是家庭(湯姆).'任何方式讓我試試 –

+0

@ seno71625你的問題是有點不清楚......如果你「需要」「家庭(湯姆),家庭(家庭)」'「,我可以這樣做:'回家」(湯姆),家庭(嘉)「;' – qxz