带有正则表达式分隔符的Java Scanner

Saw*_*yer 2 java java.util.scanner

为什么以下代码返回false?

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

奇怪的是它-[a-zA-Z]//s+会回归真实.

我也无法理解为什么这会返回true:

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

Joh*_*ica 5

扫描仪用于将字符串分解为标记.分隔符是分隔标记之间.分隔符与扫描仪匹配; 他们被丢弃了.你告诉扫描仪-[a-zA-Z]\\s+是一个分隔符,因为-v匹配正则表达式它跳过它.

如果您正在寻找与正则表达式匹配的字符串,请使用String.matches().

如果您的目标确实是将字符串拆分为标记,那么您也可以考虑使用String.split(),这有时更方便使用.