System.out.println("Enter a string:");
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
if (str.contains("\n")) {
System.out.println("yes");
}
到上面的代码片段,输入字符串one\ntwo
不会打印"是"
但以下代码打印"是"
String str = "one\ntwo";
if (str.contains("\n")) {
System.out.println("yes");
}
有人能说出这样结果的原因吗?
答案 0 :(得分:1)
在控制台输入中one\ntwo
输入时\n
被视为两个字符:\
和n
,但是当您在String中的代码中编写"\n"
时字面值,然后它表示行分隔符。
要检查您的输入是否包含\
字符,然后n
使用contains("\\n")
- 要创建\
字面值,我们需要将其写为{{1}因为它是String中的特殊字符(例如用于创建"\\"
,\n
\r
或\t
)。
答案 1 :(得分:0)
在Java中,\
是'转义'字符。如果在String声明中使用\
,它永远不会字面上放入String中,而是用于在它之后转义字符。例如,您可以使用它来转义双引号:
String str = "A double quote: \""; \\
您还可以转义转义字符:
String str = "A backslash : \\";
转义字符也用于\n
之类的元字符。如果你想在字符串中逐字地使用它们,你也必须转义它们:
String str = "A newline character: \\n";
最后一个示例正是Java从System.in检索输入时自动为您做的事情。它得到文字\n
,而不是元字符换行符。
总结一下:通过System.in输入\n
相当于直接将字符串设置为\\n
。