java.util.Scanner > useDelimiter() 结合 hasNextInt() before 和 nextInt() after

标签 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() 方法不应该对扫描仪的状态产生任何影响...

最佳答案

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/

相关文章:

java - 忽略空格、空格

java - 如何使用扫描仪 Java 检查一行是否为空,如果是,则跳过它

java - "new"在 Java 中很昂贵吗?

java - 当我输入 double 时,nextDouble() 抛出一个 InputMismatchException

java - 如何将jasper集成到jhipster项目中

java - 在 Kotlin 中启用 CORS 时,Spark 在访问路线时返回空响应

java - 扫描仪在使用 next() 或 nextFoo() 后跳过 nextLine()?

java - 在我可以解析用户的输入之前,IDE 会打印这两行

java - 在回调中渲染 http 响应

Java Spring Web 服务客户端故障处理