用Java替换字符串中特定位置的子字符串

时间:2016-11-26 05:59:38

标签: java string substring

以下是我的字符串变量:

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}}。

怎么做?

2 个答案:

答案 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)