为什么我们使用反斜杠替换Java中的特殊字符?

时间:2017-08-24 10:17:02

标签: java replace special-characters backslash

我想删除字符串中的\ n和\。首先,我移除了断路器然后移除了反斜杠。我无法一步完成。我是这样做的。

  

第1步

  String query = " \"id\" \\$ \\nVD \\";
  System.out.println(query);   // "id" \$ \nVD \ 
     

Step2

  query = query.replaceAll("\\\\n", "");
  System.out.println(query);   //"id" \$ VD \
     

第3步

  query = query.replace("\\", "");
  System.out.println(query);  // "id" $ VD      

在第2步中,我使用replaceAll删除断路器(\ n)。

在第3步中,我使用了replace来从字符串中删除反斜杠。第2步尝试使用n ie找到反斜杠。 \ n(断线器)所以它单独避免\(反斜杠)。我明白,因为反斜杠是一个特殊字符,我们在字符串替换方法中再使用一个来将其标识为文字。

但是在第2步中,为什么我们使用三个反斜杠来代替断路器?

3 个答案:

答案 0 :(得分:1)

在第二步中,您实际上使用了4个后退(不是"黑色")斜杠来替换\n个字符。

字符串中的\n实际上不是新行。它们代表\n字符。要在Java代码中编写此代码,您需要另一个\来转义\。因此,要在Java中将\n表示为字符串,您需要执行以下操作:

String s = "\\n";

现在让我们看一下replaceAllreplaceAll采用正则表达式并替换字符串中的每个匹配项。在这种情况下,您希望匹配\后跟n。你不能只使用这样的正则表达式:

\n

因为\n表示"匹配新行"在正则表达式。您只想匹配\n

所以你必须使用另一个\来逃避\。此正则表达式匹配\后跟n

\\n

现在你得到了你的正则表达式,你需要用Java代码编写它。您需要表达" 2 \n"在Java字符串中。为此,您需要\来转义字符串中的每个\。这就是为什么你最终

的原因
"\\\\n"

以上表示正则表达式中的\\n,字面上匹配\n

答案 1 :(得分:0)

您需要输入两次,因为String.replaceAll方法使用正则表达式,而在正则表达式中,返回符号由文字字符串\n匹配。 Java语法将字符串中的\n转义为单个ascii符号。那么如何为正则表达式传递一个未更改的\n字符串?你需要第二次转义它,这会导致双转义反斜杠 - \\\n\\n

在您的第2步中,您不需要"\\\\n"您应该使用"\\n"

你需要在"\\"的step3 instad中使用它"\\\\",因为没有这个,正则表达式会看到一个反斜杠,之后没有必要的指令,你会收到这个错误:

Exception in thread "main" java.util.regex.PatternSyntaxException: Unexpected internal error near index 1
\
 ^
    at java.util.regex.Pattern.error(Pattern.java:1955)
    at java.util.regex.Pattern.compile(Pattern.java:1702)
    at java.util.regex.Pattern.<init>(Pattern.java:1351)
    at java.util.regex.Pattern.compile(Pattern.java:1028)
    at java.lang.String.replaceAll(String.java:2223)
    at Test.main(Test.java:33)

您可以使用此单行一步退出\"\n"|就像正则表达式中的OR一样)

query = query.replaceAll("\\n+|\\\\", "");

答案 2 :(得分:0)

A character preceded by a backslash (\) is an escape sequence and has special meaning to the compiler. 

来自source