0

好吧,我以前从来没有遇到过这个问题,我觉得很奇怪。我正在尝试从该患者分类程序的文件中读取输入。对这些方法的前三个调用有效,但是当我调用 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);
    }
}
4

1 回答 1

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"用作分隔符。

于 2013-04-07T22:55:30.883 回答