【问题标题】:Replace a substring at a particular position in a string in Java替换Java中字符串中特定位置的子字符串
【发布时间】:2017-04-10 11:20:44
【问题描述】:

以下是我的字符串变量:

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)

如何做到这一点?

【问题讨论】:

  • 预期输出是什么?
  • 其他潜在的输入/输出是什么?在给定不同的str 的情况下,目前尚不清楚您希望这段代码做什么。

标签: java string substring


【解决方案1】:

您可以将正则表达式与replaceAll 一起使用

String str = "Home(om)";

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

输出:

首页(汤姆)

[(]:寻找(

.* :捕获除换行符之外的所有内容均值 \n\r

[)]:寻找)

更新:

您可以将replaceFirst 与非贪婪量词? 一起使用

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

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

输出:

首页(tom),首页(gia)

【讨论】:

  • 但这在String str = "Home(om), Home(gia)"; 的情况下不起作用。它会给我结果Home(tom), Home(tom)。我需要Home(tom), Home(gia)
  • @seno71625 我同意,但我以为你说I require the result in the form of Home(tom). 无论如何让我试试
  • @seno71625 你的问题有点不清楚......如果你“需要"Home(tom), Home(gia)"”,我可以这样做:return "Home(tom), Home(gia)";
【解决方案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);

【讨论】:

    最近更新 更多