如何替换字符串中的多个子字符串实例
How to replace multiple instances of substring within a string
我需要在同一个地方用不同的内容替换一个大字符串的一些内容。
假设我有一个字符串:
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;
但是这同样只适用于替换字符串的开头部分。我希望能够保存一个子字符串的所有实例,然后在这些子字符串中插入一个子字符串。
您可以使用如下简单的一行:
str = str.replaceAll("import sel\.", "import sel.gen.");
replace
将文字字符串表达式作为参数,而不是正则表达式。
这应该有效,并且比使用正则表达式更简单:
String result = str.replace("import sel.", "import sel.gen.");
我需要在同一个地方用不同的内容替换一个大字符串的一些内容。
假设我有一个字符串:
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;
但是这同样只适用于替换字符串的开头部分。我希望能够保存一个子字符串的所有实例,然后在这些子字符串中插入一个子字符串。
您可以使用如下简单的一行:
str = str.replaceAll("import sel\.", "import sel.gen.");
replace
将文字字符串表达式作为参数,而不是正则表达式。
这应该有效,并且比使用正则表达式更简单:
String result = str.replace("import sel.", "import sel.gen.");