【问题标题】:String contains() function with Scanner in JavaJava 中带有 Scanner 的 String contains() 函数
【发布时间】:2014-11-29 13:39:33
【问题描述】:
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 不会打印“yes”

但下面的代码打印“是”

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

有人能说明造成这种结果的原因吗?

【问题讨论】:

  • 你读过docsnextLine()吗?
  • 我想知道这个神奇的短语的含义:“不包括末尾的任何行分隔符。”

标签: java java.util.scanner contains


【解决方案1】:

当您在控制台输入中键入one\ntwo 时,\n 被视为两个字符:\n,但是当您在字符串字面量的代码中编写"\n" 时,它表示行分隔符。

要检查您的输入是否包含\ 字符后跟n 使用contains("\\n") - 要创建\ 文字,我们需要通过将其写为"\\" 来对其进行转义,因为它是字符串中的特殊字符(使用例如创建\n\r\t\")。

【讨论】:

    【解决方案2】:

    在 Java 中,\ 是“转义”字符。如果您在字符串声明中使用\,它永远不会真正放入字符串中,而是用于转义紧随其后的字符。例如,您可以使用它来转义双引号:

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

    你也可以转义转义字符:

    String str = "A backslash : \\";
    

    转义字符也用于像\n 这样的元字符。如果你想在字符串中使用它们,你也必须将它们转义:

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

    如果您从 System.in 检索输入,最后一个示例正是 Java 自动为您执行的操作。它得到文字 \n,而不是元字符换行符。

    总结一下:通过System.in输入\n相当于直接给\\n设置一个String。

    【讨论】:

    • @Somdutta nextLine() 按照它的 javadoc 所说的做。阅读 javadoc,你会得到答案。
    猜你喜欢
    • 2012-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-08
    • 2013-04-13
    • 1970-01-01
    • 2010-09-16
    相关资源
    最近更新 更多