2

为什么\n打印不出来?

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

基本上所有的东西都会分开打印出来\n。有什么线索吗?它应该“文字化”整个字符串,不是吗?

正如这里所说:

输入序列中的元字符或转义序列将没有特殊含义。

4

2 回答 2

2

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

    System.out.println(Pattern.quote("\\d c pb sddsf \\n"));
于 2013-04-22T16:08:39.903 回答
0

这完全按照它应该做的那样工作。您可能会因为正在查看的输出而感到困惑。让我们考虑以下示例以获取更多详细信息

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

以下的输出将是

 \QFirst part        Second part   
  Third part\E

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

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字符串(我们认为它应该工作,但不是因为 quote() 方法)。

见输出。

First part  :: \Q   \E
 Second part  :: \Q \E
 Third Part :: \Q   \E
First part  Second part      Third Part :: \Q\t\E
于 2013-04-22T17:16:43.847 回答