忽略Java中文件中的无效数据

时间:2014-12-10 19:08:50

标签: java

我正在尝试创建一个程序,该程序从文件中读取整数列表,并将它们全部添加到一起并显示给用户。我可以让这个程序正常工作,但我想要做的是如果文件中存在无效条目(例如,一个单词或任何不是数字的东西),它将提醒用户并忽略数据无效并跳至下一个可用号码。到目前为止,这是我的代码:

import java.io.File;
import java.util.Scanner;
import java.io.FileNotFoundException;
import java.util.InputMismatchException;

public class IntegerReadIn {

    public static void main(String[] args) {

        int sum = 0;

        try {

            File myFile = new File("IntegerReadIn.txt");
            Scanner scan = new Scanner(myFile);

            while (scan.hasNextInt()) {
                sum = sum + scan.nextInt();
            }

            System.out.println("Total = " + sum);
            scan.close();
        } catch (FileNotFoundException e) {
            System.err.println("No such file name");
        } catch (InputMismatchException e) {
            System.err.println("Invalid entry found - integers only.");
        }
    }
}

2 个答案:

答案 0 :(得分:0)

首先使用 nextLine()来读取整行。之后使用 Integer.parseInt()方法验证整数输入。

Scanner scan = new Scanner(myFile);
String s = scan.nextLine();

try{
    Integer.parseInt(s);
}
catch(NumberFormatException ex){
    System.out.println("Error....");
}

答案 1 :(得分:0)

也许您应该只为hasNextInt()

循环,而不是仅使用haxNext()

这样你就可以明确地检查你是否得到一个整数(因此你可以向用户提供反馈)

while (scan.hasNext()) {
   if (scan.hasNextInt()) {
       sum = sum + scan.nextInt();
   } else {
       System.out.println("Invalid Entry: " + scan.next());
   }
}

考虑到这一点,您将不需要InputMismatchException