2016-11-26 59 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