【问题标题】:What is scanner skip in Java and why to use it?什么是 Java 中的扫描仪跳过以及为什么要使用它?
【发布时间】:2018-12-21 09:02:03
【问题描述】:
scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?"); 

谁能解释一下,上面的代码是什么意思。

我对 Java 还是很陌生。

任何帮助将不胜感激。

【问题讨论】:

    标签: java regex java.util.scanner


    【解决方案1】:

    Scanner.skip

    public Scanner skip(Pattern pattern)
    

    跳过与指定模式匹配的输入,忽略分隔符。如果指定模式的锚定匹配成功,此方法将跳过输入。
    如果在当前位置未找到与指定模式的匹配项,则不跳过任何输入并抛出 NoSuchElementException。

    由于此方法从扫描仪的当前位置开始匹配指定的模式,可以匹配大量输入的模式(例如“.*”)可能会导致扫描仪缓冲大量输入.

    因此,这允许您使用正则表达式“移动”扫描仪位置。

    示例:

    跳过行首:

    Scanner scan = new Scanner("Hello world");
    scan.skip("Hello ");
    
    System.out.println(scan.nextLine());
    scan.close();
    

    世界

    由于这是使用正则表达式,因此您会一直跳到一行中间的工作:

    Scanner scan = new Scanner("Hello world, I am happy to see you");
    scan.skip(".*I am ");
    
    System.out.println(scan.nextLine());
    scan.close();
    

    很高兴见到你

    【讨论】:

      【解决方案2】:

      这个类的skip() 方法正是这样做的。它将跳过匹配模式的输入。在这种情况下,该模式表示跳过回车符 (\r) 和换行符 (\n),以及一些 unicode 字符。

      因此,当读取该行时,它将忽略该模式并仅返回字符串的其余部分。一个更简单的例子是这样的。假设你有一个字符串:

      String s = "Hello world, this is my scanner!";

      如果你有扫描仪,例如:

      Scanner scan = new Scanner(s);
      scan.skip(", this is my scanner");
      

      那么当你这样做时:

      System.out.println("" + scanner.nextLine());

      控制台的输出将是简单的

      Hello world!

      发生的情况是模式 ", this is my scanner" 被匹配,并从输入中忽略。那么剩下的就是"Hello world!" 字符串了。

      【讨论】:

      • skip 将在方法调用期间完成,而不是在下一次读取操作期间完成。所以你会在skip 期间得到一个NoSuchElementException`,因为你尝试skip 一些没有找到的东西,它以"Hello world" 开头。这个解释是不正确的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-22
      • 1970-01-01
      • 2020-10-25
      • 1970-01-01
      • 1970-01-01
      • 2017-02-11
      • 2015-09-08
      相关资源
      最近更新 更多