我有一个字符串,类似于这样($
字符总是被其他字符包围):
a$b
c$d
e$f
我希望我的字符串方法在$前面加上\符号并去掉换行符:
a\$bc\$de\$f
我尝试了这个方法,但是它没有输入\
字符:
s=s.replaceAll("\n","").replaceAll("$", "\\$");
请使用replace()
方法代替replaceAll()
。正如米歇尔正确指出的那样,replaceAll()
使用正则表达式,这会导致与$
字符相关的问题,而replace()
是按字面意义替换,对于您的情况足够了。
replaceAll()
使用正则表达式,而OP不需要)。 - Michelle$
是java Pattern
中的保留字符,它表示行尾或输入结束。
你还需要三次转义替换...
尝试使用 replaceAll("\\$", "\\\\\\$")
将 $
转义成如下形式:
s=s.replaceAll("\n","").replaceAll("\\$", "\\\\\\$");
$
是replaceAll
方法的第一个参数所表示的元字符。从正则表达式的角度来看,$
表示行末或字符串结尾。
String s = "a$b\n" +
"c$d\n" +
"e$f\n";
s = s.replaceAll("\n", "").replaceAll("\\$", "\\\\\\$");
System.out.println(s);
a\$bc\$de\$f
String.replace()
来替换字面字符串。s = s.replace("$","\\$");
然而,如果你真的想使用 replaceAll()
(例如如果模式的其他部分需要元字符):
如果你想匹配实际的 '$',你需要在模式中转义 '$' 以使其成为字面意义上的 '$'。
\$
您还需要为 Java 的引用转义 '\',因此最终得到:
s = s.replaceAll("\\$","\\$");
s = s.replaceAll("\\$",Matcher.quoteReplacement("\\$"));
和其他替代品一起使用:
s = s.replaceAll("\\$",Matcher.quoteReplacement("\\$")).replaceAll("\n","");
S
和\
是特殊字符:
s = s.replaceAll("\n", "").replaceAll("\\$", "\\\\\\$");
replaceAll
的第一个参数是正则表达式,正如文档所示。$
字符在正则表达式中有特殊含义,任何正则表达式教程都会说明。 - Dave Newton