我需要用另一个令牌替换特定令牌(在本例中为?
)(我们可以从!
或其他东西开始)。 String的replaceAll
方法适用于此。但是,如果碰巧跟随令牌action
,我不想替换问号。 (那太糟糕了!)
我已经尝试了text = text.replaceAll("[^a][^c][^t][^i][^o][^n]\\?","!");
但是没有用。
例如,我希望"test.action?param=lol?omg";
变成test.action?param=lol!omg
。我知道我可以做一些愚蠢的事情
text.replaceAll("action\\?","%%%CRAZYTOKEN%%%")
.replaceAll("\\?","!")
.replaceAll("%%%CRAZYTOKEN%%%","action?");
但这似乎是浪费时间,特别是在大字符串上。我宁愿做对。
答案 0 :(得分:2)
你需要背后的负面看法
text.replaceAll("(?<!action)\\?", "!");
这声称?
不跟随action
答案 1 :(得分:2)
只需使用zero-width negative lookbehind assertion仅匹配不关注?
的{{1}}:
action
请注意text = text.replaceAll("(?<!action)\\?", "!");
之前的额外\\
。您需要转义?
,因为它是正则表达式中的特殊字符。