Java replaceAll操作如何与反斜杠一起使用?

时间:2015-09-15 11:12:20

标签: java replaceall

为什么我需要四个反斜杠(\)来向String添加一个反斜杠?

String replacedValue = neName.replaceAll(",", "\\\\,");

在上面的代码中,您可以检查我必须替换,中的所有逗号(\,),但我必须再添加三个反斜杠(\)?

有人可以解释这个概念吗?

4 个答案:

答案 0 :(得分:4)

为Java退出一次,为regexp第二次。

\ - > \\ - > \\\\

或者,由于您实际上并未使用正则表达式,请提出khelwood的建议并使用replace(String,String),这样您只需要转义一次。

答案 1 :(得分:3)

String.replaceAll(regex, replacement)州的文件:

  

请注意,替换字符串中的反斜杠(\)和美元符号($)可能会导致结果与将其视为文字替换字符串时的结果不同;见Matcher.replaceAll。

Matcher.replaceAll(replacement)的文档然后说明:

  

反斜杠用于替换替换字符串中的文字字符

因此,为了更清楚地说明,当您使用\,替换时,就好像您正在逃避逗号。但你想要的是\字符,所以你应该用\\,来逃避它。由于在Java中,\也需要进行转义,替换字符串变为\\\\,

如果您很难记住所有这些,可以使用Matcher.quoteReplacement(s)方法,其目标是正确地逃避替换部分。您的代码将成为:

String replacedValue = neName.replaceAll(",", Matcher.quoteReplacement("\\,"));

答案 2 :(得分:1)

你必须首先转义反斜杠,因为它是一个文字(给\\),然后因为正则表达式(给出\\\\)再次转义它。

因此 -

String replacedValue = neName.replaceAll(",", "\\\\,");  // you need ////

您可以使用replace代替replaceAll -

 String replacedValue = neName.replace(",", "\\,"); 

答案 3 :(得分:1)

\用于转义序列

例如

  • 转到下一行,然后使用\n\r
  • 用于标签\t
  • 同样要打印\,这是字符串文字中的特殊内容,您必须使用另一个\来转义\\

现在replaceAll应与正则表达式一起使用,因为您没有使用正则表达式,请按照评论中的建议使用replace

String s = neName.replace(",", "\\,");