我正在学习 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() 方法不应该对扫描仪的状态产生任何影响...
最佳答案
hasNextInt 方法和 Scanner 的其他 hasNext 变体缓存下一个标记,因此当您在 hasNextInt 之后调用 nextInt 时,它会返回缓存的结果。您可以在这里查看 Scanner 的代码:http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b27/java/util/Scanner.java
关于java.util.Scanner > useDelimiter() 结合 hasNextInt() before 和 nextInt() after,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32093010/