java - 从文件中读取两个 Int 值时出现问题

标签 java java.util.scanner readfile inputmismatchexception

我有包含以下数据的文件

A,8,43
B,7,42,
C,9,34

我使用下面的代码来读取数据

Scanner input = new Scanner(new File("D:\\test.txt"));
input.useDelimiter(",|\n");  
while(input.hasNext()) {
   String name = input.next();
   int age = input.nextInt();
   int height = input.nextInt();

当我执行程序时,我收到 InputMisMatch 异常, 请指出错误所在。

最佳答案

在第二行末尾有 , 和行分隔符(我假设 \n),这意味着这两个分隔符之间有空元素。

所以在第三次迭代中

String name = input.next();  
int age = input.nextInt();
int height = input.nextInt();

input.next(); 正在消耗 "",这意味着 input.nextInt() 将尝试消耗 C .

要解决此问题,您可以将分隔符设置为一个或多个逗号和行分隔符的组合,例如

input.useDelimiter("(,|\n)+");

要进一步改进您的代码,您可以使用 Java 8 中添加的 \\R(或 \r|\n)来代替 \n > 在早期版本中)来处理所有行分隔符,因为目前您不将 \r 视为分隔符,因此可以将其视为有效标记。

所以更好的解决方案是使用

input.useDelimiter("(,|\\R)+"); //for readability

甚至

input.useDelimiter("[,\r\n]+");

关于java - 从文件中读取两个 Int 值时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44606820/

相关文章:

java.util.NoSuchElementException : No line found - Reading user input works only once

java - 如何将扫描仪输入拆分为(数字)(带空格的字符串)(数字)

testing - Flutter:如何加载文件进行测试

java - 将 MVC 与 libgdx scene2d 结合使用

java - 如何获取经过身份验证的网络点击总数?

java - JNI 的意义何在?

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

c - 导致程序崩溃的结构

PHP readfile 或 file_get_contents 在循环中

java - API 中的碱基转换方法是什么?