我正在使用以下方法测试Java扫描器:
Scanner s = new Scanner("hello");
String k = s.next("."); // <<<<-----this line throws exception
System.out.println(k);
即使使用Pattern也会给我同样的例外。 我想念什么吗? 谢谢
答案 0 :(得分:2)
Scanner.next(Pattern str)
的文档说明:如果下一个标记与指定的模式匹配,则返回下一个标记,
因此,如果您想在k
中获得某种东西,则需要一个与hello
匹配的模式,例如
.*
:从零到无限的事物
s.next(".*");
\\w+
一到无限字字符
s.next("\\w+");
通知:
您的代码s.next(".");
寻找任何填充,但是只有一次,您的字符串不匹配
仅当默认定界符为space
Scanner s = new Scanner("hello foo");
System.out.println(s.next(".*")); // hello
因此该代码将完全读取codz,因为没有-
字符
Scanner s = new Scanner("hello foo");
s.useDelimiter("-");
System.out.println(s.next(".*")); // hello foo
答案 1 :(得分:1)
您的模式匹配正好是一个字符的任何令牌。例如
Scanner s = new Scanner("h e l l o");
String pattern = ".";
while (s.hasNext(pattern))
System.out.println(s.next(pattern));
将输出
h
e
l
l
o
,但是如果第一个令牌不匹配(例如"he l l o"
中的令牌),则不会打印任何内容。您必须以其他方式使用不匹配的令牌。
如果您实际上想重新定义2个标记之间的分隔符,请改用useDelimiter()
。