所有我必须动态替换即使我不知道在这两个%符号之间会到达哪个字符串也会动态到达替换值。
例如:
this is %XXXX%
现在我想替换两个百分号之间的单词,如
this is tttt
请建议我必须使用哪个正常的expr
答案 0 :(得分:3)
String s[] = {"this is %animal%", "this is %bird%"};
for (int i = 0; i < s.length; i++) {
s[i].replaceAll("%animal%", "cow");
s[i].replaceAll("%bird%", "dove");
System.out.println(s[i]);
}
编辑:哦,我看到你改变了问题。我假设你的意思是你事先不知道%%之间会有什么。请尝试以下方法:
public static String replacePercentage(String oldString, String replacement) {
int Percent = oldString.indexOf('%');
if (Percent == -1) {
return oldString;
}
int Percent2 = oldString.indexOf('%', Percent + 1);
if (Percent2 == -1) {
return oldString;
}
String newString = oldString.substring(0, Percent);
newString += replacement;
newString += oldString.substring(Percent2 + 1);
return replacePercentage(newString, replacement);
}
如果你确实知道%%之间会有什么词,请改用oldString.replaceAll("%"+ search +"%", replacement)
。
Edit2:递归更有趣。如果您确定每个字符串只有一个%%字,请直接在第13行返回newString
。
EDIT3: 使用正则表达式:
private static final Pattern pattern = Pattern.compile("%[^%]*%");
public static String replacePercentageRegex(String oldString, String replacement) {
Matcher matcher = pattern.matcher(oldString);
return matcher.replaceAll(replacement);
}
我不确定正则表达式版本的性能。
答案 1 :(得分:2)
您要使用正则表达式的任何特定原因。您可以使用String
函数replaceAll
将所需单词替换为所需单词。
答案 2 :(得分:0)
甚至不需要replaceAll(regex, replacement)
,它需要一个正则表达式...只需使用replace(old, replacement)
,这需要简单的字符串。