Java字符串替换(删除换行符,将$更改为\$)

6

我有一个字符串,类似于这样($字符总是被其他字符包围):

a$b
c$d
e$f

我希望我的字符串方法在$前面加上\符号并去掉换行符:
a\$bc\$de\$f

我尝试了这个方法,但是它没有输入\字符:

 s=s.replaceAll("\n","").replaceAll("$", "\\$");

1
replaceAll 的第一个参数是正则表达式,正如文档所示。$ 字符在正则表达式中有特殊含义,任何正则表达式教程都会说明。 - Dave Newton
5个回答

8

请使用replace()方法代替replaceAll()。正如米歇尔正确指出的那样,replaceAll()使用正则表达式,这会导致与$字符相关的问题,而replace()是按字面意义替换,对于您的情况足够了。


2
值得注意的是为什么(因为replaceAll()使用正则表达式,而OP不需要)。 - Michelle

5

$ 是java Pattern中的保留字符,它表示行尾或输入结束。

你还需要三次转义替换...

尝试使用 replaceAll("\\$", "\\\\\\$")


2

$ 转义成如下形式:

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

2
你的问题在于 '$' 是一个正则表达式 元字符,它有特殊的意义。具体来说,'$' 表示字符串的结尾。
由于你的模式中没有任何元字符,你可以使用 String.replace() 来替换字面字符串。
s = s.replace("$","\\$");

然而,如果你真的想使用 replaceAll() (例如如果模式的其他部分需要元字符):

如果你想匹配实际的 '$',你需要在模式中转义 '$' 以使其成为字面意义上的 '$'。

\$

您还需要为 Java 的引用转义 '\',因此最终得到:

 s = s.replaceAll("\\$","\\$");

然而,在第二个参数中,'$'仍然是一个元字符,因此我们需要更多的操作:
 s = s.replaceAll("\\$",Matcher.quoteReplacement("\\$"));

和其他替代品一起使用:

 s = s.replaceAll("\\$",Matcher.quoteReplacement("\\$")).replaceAll("\n","");

0

S\是特殊字符:

s = s.replaceAll("\n", "").replaceAll("\\$", "\\\\\\$");

它与Mena的答案有什么不同? - Rahul Tripathi
不要忘记,如果您在发布后意识到已经有另一个更好或相同的答案被发布,删除您的帖子以避免在问题中添加没有任何贡献的答案是没有成本的。 - Michelle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接