java.util.Scanner> useDelimiter()与hasNextInt()之前和nextInt()之后的组合

时间:2015-08-19 10:32:34

标签: java java.util.scanner

我正在学习Java,偶然发现了一些我不理解的东西。 也许有人可以解释为什么这个代码

Scanner sc = new Scanner("78438");
sc.hasNextInt();
sc.useDelimiter("4");
System.out.println(sc.nextInt());

有这个输出:78438

我希望它就像这个

的输出
Scanner sc = new Scanner("78438");
sc.useDelimiter("4");
System.out.println(sc.nextInt());

或者

Scanner sc = new Scanner("78438");
sc.hasNextInt();
sc.useDelimiter("4");
sc.hasNextInt();
System.out.println(sc.nextInt());

或此代码

Scanner sc = new Scanner("78438");
sc.useDelimiter("4");
sc.hasNextInt();
System.out.println(sc.nextInt());

这是:78

为什么会这样,我错过了什么?我认为hasNextXXX()方法不应该对扫描仪的状态产生任何影响......

1 个答案:

答案 0 :(得分:2)

hasNextInt方法和其他hasNext Scanner变种缓存下一个标记,因此当你在hasNextInt之后调用nextInt时,它会返回缓存的结果。您可以在此处查看扫描仪代码:http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b27/java/util/Scanner.java