簡體   English   中英

從文本文件中讀取 integer 時遇到問題

[英]Trouble reading integer from text file

我有一個包含以下行的文本文件(data.txt):

1   3   t1  a   b   c   d   1
2   1   t2  a   b   c   d   3

這些值由制表符分隔,每一行代表一個新的 object。 我正在從文件中讀取數據並使用它來創建 object。 我已經能夠讀取前 7 個值,但是當我到達最后的 integer 時,掃描儀無法讀取它並且我得到了 InputMisMatchException。

這就是我現在得到的:

ID: 1
Category: 3
Title: t1
Option 1: a
Option 2: b
Option 3: c
Option 4: d
Exception in thread "main" java.util.InputMismatchException
    at java.base/java.util.Scanner.throwFor(Scanner.java:939)
    at java.base/java.util.Scanner.next(Scanner.java:1594)
    at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
    at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
    at TestApp.readFile(TestApp.java:35)
    at TestApp.main(TestApp.java:9)

但我期待這樣的事情:

ID: 1
Category: 3
Title: t1
Option 1: a
Option 2: b
Option 3: c
Option 4: d
Result: 1
ID: 2
Category: 1
Title: t2
Option 1: a
Option 2: b
Option 3: c
Option 4: d
Result: 3

我有一個 Test class 和一個 TestApp class 來運行代碼

測試 class:

import java.util.ArrayList;

public class Test {
    private int ID;
    private int category;
    private String title;
    private ArrayList<String> options;
    private int results;

    public Test(int ID, int category, String title, ArrayList<String> options, int result) {
        this.ID = ID;
        this.category = category;
        this.title = title;
        this.options = options;
        this.results = result;
    }
}

測試應用:

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

public class TestApp {
    public static void main(String[] args) {
        ArrayList<Test> tests = new ArrayList<>();
        readFile(tests, "data.txt");
    }

    public static void readFile(ArrayList<Test> tests, String inputFile) {
        File testFile = new File(inputFile);
        ArrayList<String> optionsList = new ArrayList<>();
        try {
            Scanner input = new Scanner(testFile);
            input.useDelimiter("[\t\n]");

            // Read data
            while(input.hasNext()) {
                int ID = input.nextInt();
                System.out.println("ID: " + ID);
                int category = input.nextInt();
                System.out.println("Category: " + category);
                String title = input.next();
                System.out.println("Title: " + title);
                String option1 = input.next();
                System.out.println("Option 1: " + option1);
                String option2 = input.next();
                System.out.println("Option 2: " + option2);
                String option3 = input.next();
                System.out.println("Option 3: " + option3);
                String option4 = input.next();
                System.out.println("Option 4: " + option4);
                int result = input.nextInt();
                System.out.println("Result: " + result);

                // Add to ArrayList
                optionsList.add(option1);
                optionsList.add(option2);
                optionsList.add(option3);
                optionsList.add(option4);

                // Create object
                Test newTest = new Test(ID, category, title, optionsList, result);
                // Add to test bank
                tests.add(newTest);
                // Clear ArrayList
                optionsList.clear();
            }
        } catch (FileNotFoundException error) {
            System.out.println("File not found");
        }
    }
}

我不明白為什么代碼在int result = input.nextInt();處失敗當它能夠讀取先前的值時。 我怎樣才能解決這個問題?

給你帶來麻煩的是useDelimiter() function。

我已經測試了代碼,如果您注釋行input.useDelimiter("[\t\n]"); 它工作正常並返回正確的 output。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM