以下是我的字符串变量:
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)
我要求结果为{{1}}。
怎么做?
答案 0 :(得分:3)
如果您知道要替换的子字符串的索引,我不会使用任何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 :(得分:1)
您可以将{regex与replaceAll
String str = "Home(om)";
str = str.replaceAll("[(].*[)]", "(tom)");
System.out.println(str);
输出:
主页(TOM)
[(]
:寻找(
.*
:捕获除换行符\n\r
[)]
:寻找)
更新:
您可以将replaceFirst
与非贪婪量词?
String str = "Home(om), Home(gia)";
str = str.replaceFirst("([(](.*?)[)])", "(tom)");
System.out.println(str);
<强>输出:强>
Home(tom),Home(gia)