Java正则表达式字符串结尾替换失效问题求助
问题原因及解决方法
核心问题:你用的
String.replace()方法是普通字符串匹配替换,它不会把传入的参数当作正则表达式解析。所以"a$"会被当作字面量去寻找字符串里的"a$",而你的目标字符串"I love Banana"末尾是单个"a",自然匹配不到,也就不会有替换效果。正确方案:使用支持正则表达式的
String.replaceAll()方法,它会把第一个参数当作正则规则处理。$在正则里是末尾锚点,用来匹配字符串的结尾位置,所以"a$"就能精准匹配字符串末尾的"a",替换后得到你想要的结果。
修正后的代码示例:
public class Test { public static void banana(){ String test = "I love Banana"; // 使用replaceAll支持正则表达式匹配末尾的a System.out.println("Test: "+test+"\nRegEx: "+test.replaceAll("a$","as")); } }
运行这段代码会输出:
Test: I love Banana RegEx: I love Bananas
- 额外说明:你之前尝试用反斜杠转义
$没有效果,是因为在replace()方法里,$就是普通字符,转义后变成"\$",依然和目标字符串里的内容不匹配,自然没用。只有在replaceAll()里需要匹配字面量的$时,才需要用\\$转义(Java里字符串要双反斜杠),但这里你要的是正则的末尾锚点,所以不需要转义$。
内容的提问来源于stack exchange,提问作者Michèle S.
相关产品推荐
相关产品推荐

