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