Java 输入不匹配异常

Java 输入不匹配异常,java,exception,Java,Exception,到目前为止,我有一个如下所示的文本文件: // this is a comment, any lines that start with // // (and blank lines) should be ignored [ElectricTool data] // data is rechargeable, power, timesBorrowed, onLoan, toolName, itemCode, cost, weight true,18V,12,false,Makita BHP4

到目前为止,我有一个如下所示的文本文件:

// this is a comment, any lines that start with //
// (and blank lines) should be ignored


[ElectricTool data]
// data is rechargeable, power, timesBorrowed, onLoan, toolName, itemCode, cost, weight
true,18V,12,false,Makita BHP452RFWX,RD2001,14995,1800
etc...
和下面的代码来遍历此文本文件:

public void readData()
{ try{
    FileDialog fileDialogBox = new FileDialog(myFrame, "Open", FileDialog.LOAD);
    fileDialogBox.setVisible(true);
    String fileName = fileDialogBox.getFile();
    File dataFile = new File(fileName);
    Scanner scanner = new Scanner(dataFile);      
    String lineOfText;    
    String typeOfData="";
   while(scanner.hasNext())
   {
       lineOfText = scanner.nextLine().trim();            
       ElectricTool electricTool = new ElectricTool();         
         if (lineOfText.startsWith("[ElectricTool data]")){
           typeOfData="ElectricTool";
        }        
       else if (!lineOfText.isEmpty() ){
        if (!lineOfText.startsWith("//")){
         if ( typeOfData.equals("ElectricTool")){
          Scanner sc = new Scanner(lineOfText).useDelimiter(",");
          electricTool.extractTokens(sc);
          toolList.add(electricTool);
          itemCount++;
          sc.close();
         }
       }
    }
  }
  scanner.close();
 }     
 catch(FileNotFoundException ex)
 {
    System.out.println("ERROR: File NOT Found! ");
 }
}
而有问题的方法是:

public void extractTokens(Scanner sc)
{
       recheargable = sc.nextBoolean();
       power = sc.next().trim();
       super.extractTokens(sc);
}
RecHearcable被声明为布尔值: 私有布尔可接收

当它到达recoverable=sc.nextBoolean()时,它会给我一个missmatch异常;
可能问题出在readData方法中的if语句中?我试图重做if语句,但没有成功。有没有办法修复错误匹配?

我想验证并创建以下测试:

public static void main(String[] args) {
    Scanner sc = new Scanner("true,18V,12,false,Makita BHP452RFWX,RD2001,14995,1800").useDelimiter(",");
    if (sc.hasNext()) {
        try {
            System.out.println(sc.nextBoolean());
        } catch (Exception e) {
            System.err.println(sc.next());
        }
    }
    while (sc.hasNext()) {
        System.out.println(sc.next());
    }
}
它的工作,因为它应该,我会改变代码如下,以阻止我的问题

public void extractTokens(Scanner sc) {
    try {
        recheargable = sc.nextBoolean();
    } catch (Exception e) {
        System.err.println("troublemaker: " + sc.next());
    }
    power = sc.next().trim();
    super.extractTokens(sc);
}
编辑#1: 根据您的回答(我无法确认),您可能需要尝试更多的错误检测。我想你的问题在另一个方面

public void extractTokensx(Scanner sc) {
    try {
        recheargable = sc.nextBoolean();
        power = sc.next().trim();
        super.extractTokens(sc);
    } catch (Exception e) {
        System.err.println("dumping the rest of the troubeling line: ");
        while (sc.hasNext()) {
            System.err.print(sc.next() + " - ");
        }
    }
}

代码中可充值变量的数据类型是什么?根据文档,Scanner.nextBoolean“如果下一个标记不是有效的布尔值,则抛出InputMismatchException”私有布尔可充值;是声明。在找到
ElectricTool
后,您可能无法继续下一行。尝试打印出传递给
extractTokens
方法的行,以确保您正在分析正确的行。尝试使用next()并将其作为系统输出打印,以确认我们正在搜索正确的点,或者编写一个测试来确认错误。当我尝试建议的方法时,结果如下所示:它通过可检索,显示一个空白的终端窗口,实际上没有打印任何内容。之后,它在“电源”处停了下来,并发出了一声“NoTouchElementException”