为什么\n
打印不出来?
System.out.println(Pattern.quote("\\d c pb sddsf \n"));
基本上所有的东西都会分开打印出来\n
。有什么线索吗?它应该“文字化”整个字符串,不是吗?
正如这里所说:
输入序列中的元字符或转义序列将没有特殊含义。
为什么\n
打印不出来?
System.out.println(Pattern.quote("\\d c pb sddsf \n"));
基本上所有的东西都会分开打印出来\n
。有什么线索吗?它应该“文字化”整个字符串,不是吗?
正如这里所说:
输入序列中的元字符或转义序列将没有特殊含义。
\n
是一个有效的 java 转义字符,用反斜杠将其转义以将其视为普通字符。:
System.out.println(Pattern.quote("\\d c pb sddsf \\n"));
这完全按照它应该做的那样工作。您可能会因为正在查看的输出而感到困惑。让我们考虑以下示例以获取更多详细信息
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