当我这样做时
String s = "2r2";
System.out.println(s.replaceFirst("2r2","4"));
它有效,打印4,但是当我这样做时
String s = "2^2";
System.out.println(s.replaceFirst("2^2","4"));
它不起作用(打印2 ^ 2),为什么?我该怎么办?
答案 0 :(得分:5)
replaceFirst
使用正则表达式语法,其中^
具有特殊含义(它表示字符串或行的开头,具体取决于使用的修饰符)。
你需要像^
一样逃避"2\\^2"
,或者让你的生活更简单地使用Pattern.quote("2^2")
为你做这件事。
所以你的代码应该更像:
String s = "2^2";
System.out.println(s.replaceFirst(Pattern.quote("2^2"),"4"));
答案 1 :(得分:2)
在正则表达式中,^
字符具有特殊含义。它匹配一行的开头。
使用s.replaceFirst("2\\^2","4")
代替 - 反斜杠意味着将^
视为普通字符,而不是赋予其特殊含义。