int EID, ESSN, EM, FSSN, FM;
String EN, EEN, FN;
Scanner Ein = new Scanner(employer);
Scanner Fin = new Scanner(filers);
Ein.useDelimiter(", *");
Fin.useDelimiter(", *");
ArrayList<Employer> EmployIn = new ArrayList<Employer>();
ArrayList<Filer> FilerIn = new ArrayList<Filer>();
while (Ein.hasNextLine())
{
EN = Ein.next(); EID = Ein.nextInt(); EEN = Ein.next(); ESSN = Ein.nextInt(); EM = Ein.nextInt();
EmployIn.add(new Employer(EN, EID,EEN,ESSN,EM));
}下面是我正在编写的一段代码。我一直收到java.util,InputMismatchException:null (在java.util.Scanner中)
在雇主文件中,它的结构如下:
Google, 0, BOX CHARLES, 724113610, 50
Microsoft, 2, YOUNG THOM, 813068590, 50
Amazon, 4, MCGUIRE MARK, 309582302, 50
Facebook, 8, MOFFITT DON, 206516583, 50我不知道为什么会出现不匹配的情况。如果有人能帮上忙,那就太棒了。
发布于 2014-10-02 08:08:33
你的扫描仪图案是错的。
模式分隔符是",*“,它被解释为正则表达式,由逗号组成,后跟任意数量的空格。
在行的末尾,您遇到最后一个值, 50,之后没有,,因此没有匹配,表达式失败。
如果将代码中的1条语句放在每行中,这一点对您来说会更明显:
EN = Ein.next();
EID = Ein.nextInt();
EEN = Ein.next();
ESSN = Ein.nextInt();
EM = Ein.nextInt();然后,异常堆栈跟踪将指出失败仅发生在EM行上。
如果您更改您的模式以匹配逗号或行尾,它将起作用:
Ein.useDelimiter(Pattern.compile("(, *| *$)", Pattern.MULTILINE));您可能应该比我更聪明地使用该模式,但以下代码适用于我:
public static void main(String[] args) throws FileNotFoundException {
int EID, ESSN, EM, FSSN, FM;
String EN, EEN, FN;
Scanner Ein = new Scanner(new File("employers.txt"));
Ein.useDelimiter(Pattern.compile("(, *| *$)", Pattern.MULTILINE));
while (Ein.hasNextLine()) {
EN = Ein.next();
EID = Ein.nextInt();
EEN = Ein.next();
ESSN = Ein.nextInt();
EM = Ein.nextInt();
System.out.printf("%s %d %s %d %d %n", EN, EID, EEN, ESSN, EM);
}
}https://stackoverflow.com/questions/26152504
复制相似问题