带正则表达式分隔符的Java扫描程序

带正则表达式分隔符的Java扫描程序,java,java.util.scanner,Java,Java.util.scanner,为什么下面的代码返回false Scanner sc = new Scanner("-v "); sc.useDelimiter("-[a-zA-Z]\\s+"); System.out.println(sc.hasNext()); 奇怪的是-[a-zA-Z]//s+将返回true 我也不明白为什么这个结果是真的: Scanner sc = new Scanner(" -v"); sc.useDelimiter("-[a-zA-Z]\\s+"); System.out.println(sc.h

为什么下面的代码返回false

Scanner sc = new Scanner("-v ");
sc.useDelimiter("-[a-zA-Z]\\s+");
System.out.println(sc.hasNext());
奇怪的是
-[a-zA-Z]//s+
将返回true

我也不明白为什么这个结果是真的:

Scanner sc = new Scanner(" -v");
sc.useDelimiter("-[a-zA-Z]\\s+");
System.out.println(sc.hasNext());

扫描器用于将字符串分解为令牌。分隔符是标记之间的分隔符。分隔符是扫描仪不匹配的内容;它们被丢弃了。您告诉扫描器
-[a-zA-Z]\\s+
是一个分隔符,由于
-v
与regex匹配,它将跳过它

如果要查找与正则表达式匹配的字符串,请使用


如果你的目标真的是把一个字符串分割成令牌,那么你也可以考虑,有时使用起来更方便。

谢谢John Kugelman,我想你是对的。 扫描程序可以使用自定义分隔符将输入拆分为令牌。 默认分隔符是空白

当分隔符与任何输入不匹配时,它会将所有输入作为一个标记:

    Scanner sc = new Scanner("-v");
    sc.useDelimiter( "-[a-zA-Z]\\s+");
     if(sc.hasNext())
          System. out.println(sc.next());
在上面的代码中,分隔符实际上没有得到任何匹配,所有输入“-v”将是单个标记。 hasNext()表示有下一个标记

    Scanner sc = new Scanner( "-v ");
    sc.useDelimiter( "-[a-zA-Z]\\s+");
     if(sc.hasNext())
          System. out.println(sc.next());

这将匹配分隔符,并且分割以0标记结束,因此hasNext()为false。

我告诉您使用
-[a-zA-Z]\\s+
作为分隔符,-v是输入。