Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何获取Scanner.nextInt()以获取下一个int?_Java_File Io - Fatal编程技术网

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

Java 如何获取Scanner.nextInt()以获取下一个int?,java,file-io,Java,File Io,好吧,我以前从来没有遇到过这个问题,我觉得很奇怪。我正在尝试从该患者分类程序的文件中读取输入。对这些方法的前三个调用是有效的,但是当我调用fileRead.nextInt()时,它会崩溃,并给我一个InputMismatchException。我正在读的行有点像这样:我很确定我使用的分隔符是正确的。如果我删除对char的强制转换并尝试将其作为int来执行,这并不重要,它只是不起作用。为什么?我已经完成了一个与此类似的程序,并且fileRead.next()三次(以使三个令牌在线)工作得非常好 v

好吧,我以前从来没有遇到过这个问题,我觉得很奇怪。我正在尝试从该患者分类程序的文件中读取输入。对这些方法的前三个调用是有效的,但是当我调用fileRead.nextInt()时,它会崩溃,并给我一个InputMismatchException。我正在读的行有点像这样:我很确定我使用的分隔符是正确的。如果我删除对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);
    }
}

鉴于您在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”
作为分隔符。

看到您在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”
作为分隔符。

为什么不使用fileRead.next()将所有值作为字符串读取,然后将其转换为所需的格式?至少出于诊断目的,请尝试@Bfcm的建议,看看它是否仍然引发异常。使用hasNextInt()用于在调用nextInt()之前检查下一个标记是否为int。为什么不使用fileRead.next()将所有值作为字符串读取,然后将其转换为所需格式?至少出于诊断目的,请尝试@Bfcm的建议,看看它是否仍然引发异常。使用hasNextInt()用于在调用nextInt()之前检查下一个标记是否为int。但这并不能解释为什么它适用于前三行(在
\n
中的两行中没有发生意外)。@edwga我相信“对这些方法的前三个调用”是指
next[Boolean]()
调用
nextInt()之前的三个
调用
,成功检索第一行的前3个令牌,而不是指前3行。毕竟,
loadPatientData()
方法应该只调用一次。是的,在我的另一个程序中,只需使用fileRead.useDelimiter(;|\n”);工作得非常好。也许是因为调用了next()以外的其他函数,尽管我不确定。但是谢谢你,这完美地修复了错误。但这并不能解释为什么它适用于前三行(它毫无意外地通过了
\n
中的两行)。@edwga我相信“对这些方法的前三次调用”指的是
next[Boolean]()
之前的三次
调用,成功检索第一行的前3个令牌,不引用前3行。毕竟,
loadPatientData()
方法应该只调用一次。是的,在我的另一个程序中,只需使用fileRead.useDelimiter(;|\n”);工作得非常好。也许是因为调用了next()以外的其他函数,尽管我不确定。但是谢谢你,这完美地修复了错误。