如何让Scanner.nextInt()获取下一个int?

时间:2013-04-07 22:46:49

标签: java file-io

好吧,我之前从未遇到过这个问题,我觉得这很奇怪。我正在尝试从该患者分类程序的文件中读取输入。对这些方法的前三个调用有效,但是当我调用fileRead.nextInt()时它会爆炸并给我一个InputMismatchException。我正在阅读的内容有点像这样:http://gyazo.com/74c0a9381479a12bb4804d714901b41c我很确定我使用的分隔符是正确的。如果我将强制转换为char并尝试以int形式执行并不重要,它就行不通。为什么?我已经完成了一个与此类似的程序和fileRead.next()三次(以获得三个令牌在线上)完美地工作。

void loadPatientData() throws FileNotFoundException
 {
    linkHeads();
    Patient person = null;
    Scanner fileRead = makeAFile(patient);
    fileRead.useDelimiter(";|\n");

    while (fileRead.hasNext())
    {
        //person = new Patient(fileRead.next(), fileRead.nextBoolean(), fileRead.nextBoolean(), (char)fileRead.nextInt());
        String name = fileRead.next();
        boolean bob = fileRead.nextBoolean();
        boolean joe = fileRead.nextBoolean();
        int queue = fileRead.nextInt(); //hell breaks loose
        //addPatientData(person);
    }
}

1 个答案:

答案 0 :(得分:3)

看到你在Windows上并且你的文本文件在notepad.exe中正确显示,我将假设你的文件实际上使用\r\n作为换行符,而不只是\n,会解释nextInt()处的例外情况。

示例:

static void loadPatientData()  {
    Scanner fileRead = new Scanner("John Doe;true;true;0\r\nJane Roe;false;true;2\r\n");
    fileRead.useDelimiter(";|\r\n"); // vs.:
//  fileRead.useDelimiter(";|\n");

    while (fileRead.hasNext()) {
        String name = fileRead.next();
        boolean bob = fileRead.nextBoolean();
        boolean joe = fileRead.nextBoolean();
        int queue = fileRead.nextInt(); //hell breaks loose
    }
}

要涵盖换行的所有情况,您可能希望使用";|\r\n|\n"作为分隔符。