我在这个java代码中遇到分隔符的问题?

时间:2013-07-28 23:23:33

标签: java

我要做的是让此代码询问2个整数输入,从名为'temps.txt'的文件中读取数据,并输出处理的天数以及处理的平均温度。问题是我收到了这个错误

Input the maximum temperature.
java.util.InputMismatchException
    at java.util.Scanner.throwFor(Scanner.java:840)
    at java.util.Scanner.next(Scanner.java:1461)
    at java.util.Scanner.nextInt(Scanner.java:2091)
    at java.util.Scanner.nextInt(Scanner.java:2050)
    at TempReader.main(TempReader.java:15)
You did not input a valid integer.

每当我尝试运行它时。到目前为止,我的代码看起来像这样:

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


public class TempReader{
public static void main(String[] args) throws Exception {
    File myFile = new File("temps.txt");

    Scanner input = new Scanner(myFile).useDelimiter(",");

while (true){

    System.out.println("Input the maximum temperature.");

try {
            int maxTemp = input.nextInt();

    }
    catch (Throwable t) {

        t.printStackTrace();
        System.out.println("You did not input a valid integer.");
        break;
    }
    System.out.println("Input the minimum temperature.");
    try {
        int minTemp = input.nextInt();

    }
    catch (Throwable t) {

        t.printStackTrace();
        System.out.println("You did not input a valid integer.");
        break;
    }
}


}

}

temps txt文件看起来像这样

04/01 / 2013,10

04/02 / 2013,20

04/03 / 2013,30

04/04 / 2013,40

04/05 / 2013,50

04/06 / 2013,60

我已经尝试过使用/和作为分隔符,并且都不起作用,是否有可能有2个,或者我是否还要做其他事情?

(是的,我可以让它完成上面提到的过程,我需要帮助的是这个错误,因为我不知道是什么导致它)

3 个答案:

答案 0 :(得分:1)

检查您的数据文件以及您要阅读的内容。

04/01/2013不是整数!

<强>更新

使用Date d = new SimpleDateFormat("MM/dd/yy").parse(input.next());获取您的日期,然后使用nextInt获取温度。此外,您似乎在查找文件中的最大和最小临时值,但每天只有一个临时值。您尝试读取最小临时值将始终抛出异常,因为它不存在。

答案 1 :(得分:0)

我对Scanner一无所知,但我知道这样做的老式方式,更重要的是,我知道如何让它发挥作用。这是代码:

public class TempReader {
    public static void main(String[] args) throws IOException {
        File myFile = new File("temps.txt");
        BufferedReader input = new BufferedReader(new FileReader(myFile));
        String line;
        while ((line = input.readLine()) != null) {
            StringTokenizer tok = new StringTokenizer(line, ",");
            System.out.println("Input the maximum temperature.");
            try {
                int maxTemp = Integer.parseInt(tok.nextToken());
            } catch (NumberFormatException e) {
                e.printStackTrace();
                System.out.println("You did not input a valid integer.");
                break;
            }
            System.out.println("Input the minimum temperature.");
            try {
                int minTemp = Integer.parseInt(tok.nextToken());
            } catch (NumberFormatException e) {
                e.printStackTrace();
                System.out.println("You did not input a valid integer.");
                break;
            }
        }
    }
}

这是对您的计划的简单修改,使用BufferedReaderStringTokenizerInteger.parseInt代替Scanner,我无法理解这一点。< / p>

答案 2 :(得分:0)

public static void main(String[] args) throws Exception {
        File myFile = new File("C:/temps.txt");

        Scanner input = new Scanner(myFile);
        String linrread = null;
        try {
            while ((linrread = input.nextLine()) != null) {
                System.out.println("linrread ."+ linrread);
                if (linrread.indexOf(",") != -1) {
                    String[] split = linrread.split(",");
                    String date = split[0];
                    String temp = split[1];
                    System.out.println("date :" + date + " temp: " + temp);
                }
            }
        } catch (NoSuchElementException t) {
            t.printStackTrace();
            System.out.println("Reached end of the file.");
        }

    }

此代码将读取您的文件并从文件中获取元素。你必须修改它以符合你的要求。