String包含带有Scanner的函数(Java)

时间:2014-10-04 20:24:51

标签: java java.util.scanner contains

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");
}

有人能说出这样结果的原因吗?

2 个答案:

答案 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