gpt4 book ai didi

java - 扫描仪定界符无法按预期使用输入文件 (Java)

转载 作者:塔克拉玛干 更新时间:2023-11-01 23:08:11 26 4
gpt4 key购买 nike

我正在编写一个程序来从始终遵循 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 中运行我的程序时,我收到以下错误:

Exception in thread "main" java.util.InputMismatchException at java.util.Scanner.throwFor(Scanner.java:864) at java.util.Scanner.next(Scanner.java:1485) at java.util.Scanner.nextInt(Scanner.java:2117) at java.util.Scanner.nextInt(Scanner.java:2076) at Huffman_Encoder.main(Huffman_Encoder.java:26)

即,行:int n = in.nextInt(); 抛出异常。我不确定为什么会这样。根据我对扫描器定界符的理解,我应该跳过冒号,因此 int n = in.nextInt(); 应该将冒号后面的值放入 n

我在这里没有看到什么?

操作系统是 Windows 10,如果重要的话。谢谢。

编辑:经过进一步测试,我确定错误是在 String t = in.next(); 之后立即发生的在显示“A”之后立即打印出 t,然后程序在 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())。

关于java - 扫描仪定界符无法按预期使用输入文件 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35978417/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com