正则表达式替换字符串中的单词

时间:2011-06-15 10:01:55

标签: java

所有我必须动态替换即使我不知道在这两个%符号之间会到达哪个字符串也会动态到达替换值。

例如:

this is %XXXX%

现在我想替换两个百分号之间的单词,如

this is tttt

请建议我必须使用哪个正常的expr

3 个答案:

答案 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),这需要简单的字符串。