如何替换字符串中的多个子字符串实例

时间:2015-12-17 21:31:56

标签: java regex string substring stringbuilder

我需要在同一个地方替换不同内容的大字符串的一些内容。

假设我有一个字符串:

String str = "package blah.foo.bar;\n"
           + "import org.blah.blah;\n"
           + "import sel.this.that;\n"
           + "import sel.boo.foo;\n"
           + "...more text";

我想将单词gen插入以import sel.开头的语句中,以便最终结果如下:import sel.gen.this.that;

我使用以下方法取得了成功,但只有当我知道子字符串在字符串中的位置时。我的问题是我不确定如何使以下代码动态化:

private String modifyString(String str){
    String hold = str.substring(0, str.indexOf(";"));
    hold = new StringBuilder(hold).insert(13, "gen.").toString();
    str = str.replace("(?m)^package.*", hold);
    return str;

}

上述代码正确地将字符串package blah.foo.bar;替换为package blah.gen.foo.bar;

但这又一次只能替换字符串的开头部分。我希望能够保存子字符串的所有实例,然后在这些子字符串中插入子字符串。

2 个答案:

答案 0 :(得分:5)

您可以使用简单的行:

$uri = trim($_SERVER['REQUEST_URI'], '/');
if(preg_match("#^(?P<type>\w+)-for-sale-in-(?P<district>\w+)(/(?P<id>\d+))?$#i",
              $uri, $matches)
{
  var_dump($matches['type']);
  var_dump($matches['district']);
  if(isset($matches['id']))
    var_dump($matches['id']);
}

<强> Regex demo

<强> IdeOne example

答案 1 :(得分:-1)

replace将文字字符串表达式作为参数,而不是正则表达式。

这应该比使用正则表达式更简单:

String result = str.replace("import sel.", "import sel.gen.");