什么是Java中的扫描程序跳过以及为什么要使用它?

时间:2018-07-13 03:46:31

标签: java regex java.util.scanner

scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?"); 

有人可以解释一下,上面的代码是什么意思。

我刚接触Java。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分: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();
  

很高兴见到你

答案 1 :(得分:0)

此类的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!"字符串。