2014-10-04 37 views
-3
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不打印“是”字符串包含在Java扫描仪()函数

但下面的代码输出“是”

String str = "one\ntwo"; 
if (str.contains("\n")) { 
    System.out.println("yes"); 
} 

任何人都可以提出这样的结果的原因吗?

+2

您是否阅读过'nextLine()'的[docs](http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#nextLine%28%9)? – 2014-10-04 20:26:47

+0

我想知道这个神奇词组的含义:“最后不包括任何分隔符。” – MarsAtomic 2014-10-04 20:30:20

回答

1

当在控制台输入\n键入one\ntwo被视为两个字符:\n,但是当你在代码串写"\n"文字,那么它代表行分隔符。

要检查你的输入包含\字符后跟n使用contains("\\n") - 创造\文字,我们需要通过写它作为"\\"逃避它,因为它是在字符串特殊字符(用于实例来创建\n\r\t,或\")。

+0

谢谢。有效。 – Somdutta 2014-10-04 20:32:32

0

在Java中,\是'逃避'字符。如果在字符串声明中使用\,它永远不会被直接放入字符串中,而是用于在字符之后立即转义字符。例如,你可以用它来逃脱双引号:

String str = "A double quote: \""; \\ 

您也可以逃避转义字符:

String str = "A backslash : \\"; 

转义字符也被用在元字符,例如\n。如果你想从字面上使用那些在一个字符串,你必须逃脱他们还有:

String str = "A newline character: \\n"; 

这最后一个例子正是Java的自动为你做,如果你检索来自System.in输入。它得到的文字\n,而不是元字符的新行。

所以总结一下:通过System.in输入\n就相当于直接将String设置为\\n

+0

是不是nextLine()函数读取整行? – Somdutta 2014-10-04 20:29:58

+0

@Somdutta nextLine()完成了javadoc所说的。阅读javadoc,你会得到你的答案。 – 2014-10-04 20:32:08