Java Pattern.quote(“\\ d c pb sddsf \ n”);为什么

时间:2013-04-22 16:06:12

标签: java regex pattern-matching

为什么\n无法打印出来?

System.out.println(Pattern.quote("\\d c pb sddsf \n"));

基本上所有内容都会以\n分开打印出来。任何线索?它应该“整理”整个字符串,不应该吗?

正如here所述:

  

将给出输入序列中的元字符或转义序列   没有特别的意义。

2 个答案:

答案 0 :(得分:2)

\n是一个有效的java转义字符,用反斜杠转义它以将其视为普通字符。:

    System.out.println(Pattern.quote("\\d c pb sddsf \\n"));

答案 1 :(得分:0)

这完全按照预期的方式工作。可能你因为你正在看的输出而感到困惑。让我们考虑以下示例以获取更多详细信息

 System.out.println(Pattern.quote("First part \t Second part \n Third part"));

以下输出为

 \QFirst part        Second part   
  Third part\E

在字符串的开头和结尾,\Q表示“文字文本的开头”(即正则表达式“公开引用”) \E表示“文字结尾”(即正则表达式“close quote”),这意味着它将字符串转换为正则表达式文字。

First part \t Second part在这部分中,这两个文本部分由制表空间分隔,这意味着它应该在字符串表示中。

通过使用换行符转义序列在下一行打印

\n Third part

如果你想看到那些转义序列,那么你必须使用\,但在这种情况下,它们将被简单地视为字符串而不是转义字符。

System.out.println(Pattern.quote("First part \\t Second part \\n Third part"));

上面的输出会出来

\QFirst part \t Second part \n Third part\E

有关更多说明,请查看以下

的输出
String esc = "\t";
String pat = Pattern.quote(esc);
String [] str = "First part      Second part \t Third Part".split(pat);
for(String n : str){
   System.out.println(n + " :: " + pat);
    }

esc = "\\t";
pat = Pattern.quote(esc);
str = "First part   Second part \t Third Part".split(pat);
for(String n : str){
   System.out.println(n + " :: " + pat);
}

现在对于esc = "\t";,它将分割字符串而esc = "\\t";它不会作为分割方法无法找到任何\t作为字符串(我们认为这应该起作用,但不是因为引用() 方法)。

请参阅输出。

First part  :: \Q   \E
 Second part  :: \Q \E
 Third Part :: \Q   \E
First part  Second part      Third Part :: \Q\t\E