扫描仪分隔符无法按输入文件的预期工作(Java)

2024-02-13

我正在编写一个程序来从文本文件读取输入,该文件始终遵循 char:int 格式,如下所示:

A:3
B:1
C:2
D:2

(这里是eof)

我想读入字符及其相应的数字,忽略冒号。

在我的程序中,我有以下声明和初始化:

String fileName = "input.txt";
File file = new File(fileName);
Scanner in = new Scanner(file).useDelimiter(":");

然后,我尝试使用以下循环从文件中读取内容:

while(in.hasNextLine()){
        String t = in.next();
        int n = in.nextInt();
        ....
}

当我尝试在 Eclipse 中运行程序时,收到以下错误:

线程“main”中的异常 java.util.InputMismatchException 在 java.util.Scanner.throwFor(Scanner.java:864) 在 java.util.Scanner.next(Scanner.java:1485) 在 java.util.Scanner.nextInt(Scanner.java:2117) 在 java.util.Scanner.nextInt(Scanner.java:2076) 在 Huffman_Encoder.main(Huffman_Encoder.java:26)

即该行:int n = in.nextInt();正在抛出异常。我不知道为什么会这样。根据我对扫描仪分隔符的理解,我应该跳过冒号,所以int n = in.nextInt();应该将冒号后面的值放入n.

我在这里没有看到什么?

操作系统是 Windows 10(如果有的话)。谢谢。

edit:经过进一步测试,我已经确定错误是在之后立即发生的String t = in.next();打印输出t紧接着显示“A”,然后程序抛出异常int n = in.nextInt();


扫描仪获取的实际输入是以下字符串:

A:3\nB:1\nC:2\nD:2

所以快速解决方法是添加\n到分隔符列表:

Scanner in = new Scanner(file).useDelimiter("[:\n]");

但是,这可能并不严格正确,因为这会接受字母和数字之间带有冒号或换行符的任何流,例如:

A
3:B
4

因此,您最好逐行读取输入并在冒号处拆分(请参阅String.split()).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

扫描仪分隔符无法按输入文件的预期工作(Java) 的相关文章

随机推荐