使用Try / Catch块识别文件中的字符串

时间:2015-07-29 18:54:57

标签: java file-io try-catch java.util.scanner inputmismatchexception

我试图从文件中读取一堆数字并添加它们。但我在文件中也添加了一些字符串。我现在正在尝试读取数字将它们添加到一起并使用try / catch块我试图在文件读取字符串而不是整数时显示错误。但是,只要代码从文件中读取字符串就会给出错误,代码就不会继续将数字添加到一起。它只是打印错误并打印0.如何修改它以便继续读取数字并将它们添加到一起,并在读取字符串后显示错误消息。

代码:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.InputMismatchException;
import java.util.Scanner;
public class AddNumbers {

public static void main (String[]args) {
    try{
        File myFile = new File("numbers.txt");
        Scanner scan = new Scanner(myFile);

        int x;
        int y = 0;
        try{
            //Read file while it has a line 
            while(scan.hasNextLine()){
            //scan a integer value
                x = scan.nextInt();
            //Add the scanned value to y
                y = y+x;
            }
        }catch(InputMismatchException e){
            //If a string is found then print this error
            System.err.println("Strings found! Error!");
        }
        System.out.println(y);
        scan.close();

    }catch(FileNotFoundException e){
        System.err.println("No such file exists!");
        System.out.println();
    }


}

}

文件内容

Albert 
10000
20000
30000
Ben 
50000
12000
Charlie 

3 个答案:

答案 0 :(得分:1)

首先,while块放在catch循环之外。如果发生异常,控制将到达打印错误消息的try-catch块,然后退出循环。您需要将Scanner#nextInt()放在循环中。

其次,当Scanner抛出异常时,Scanner#nextLine()不会消耗输入,导致无限循环,以防读取无效整数。您只需使用int阅读整行,然后将其解析为while (scan.hasNextLine()) { try { // scan a integer value String line = scan.nextLine(); x = Integer.parseInt(line); // Add the scanned value to y y = y + x; } catch (NumberFormatException e) { // this can be thrown by Integer.parseInt(line) // If a string is found then print this error System.err.println("Strings found! Error!"); } }

{{1}}

答案 1 :(得分:0)

尝试将该行作为字符串读取,然后使用Integer.parseInt(x)并在捕获异常时捕获该行。

有关Integer.parseInt()

的信息,请参阅Here

答案 2 :(得分:0)

您需要将try / catch放在while循环中。

While(scan.hasNextLine()){
    try{
      x=scan.nextInt();
      // add
    }catch(InputMismatchException ime){
       //write error
    }
}