Java使用Scanner.next()出现NoSuchElementException异常问题咨询
异常原因
你在单次循环中调用了两次scanner.next()方法:第一次是if判断时读取一个分词,第二次是打印时又读取了下一个分词,这会带来两个问题:
- 每次循环会跳过一个分词,比如测试用例里第一个
Hello被if判断时读取消耗了,打印时只会输出第二个World - 当总分词数为奇数时,最后一次循环的if判断已经读取了最后一个分词,后续打印调用
next()时没有可用元素,直接抛出NoSuchElementException
注释if语句后单次循环只调用一次next(),所有分词可以被正常读取,所以运行正常。
修复方案
单次循环只调用一次next(),将读取到的分词存入临时变量后再做判断和打印逻辑即可,修复后代码如下:
import java.util.Scanner; public class ScannerDemo { public static void main(String[] args) { String s = "Hello World K"; Scanner scanner = new Scanner(s); while (scanner.hasNext()) { // 单次循环只读取一次分词 String current = scanner.next(); // 判断是否是终止字符 if(current.equalsIgnoreCase("q")){ break; } // 非终止字符直接打印 System.out.println(current); } scanner.close(); } }
内容的提问来源于stack exchange,提问作者KVL
相关产品推荐
相关产品推荐

