【问题标题】:Scannner Input Match Exception扫描仪输入匹配异常
【发布时间】:2017-05-11 15:38:34
【问题描述】:

我很想从文件中读取整数。我尝试从文件中读取时不断收到大量输入不匹配异常。我已经尝试了我所知道的一切,但它对我不起作用。在我不明白为什么这次之前我已经这样做了。

    Scanner in_read;
    in_read = new Scanner("usercount.txt");

    int temp = in_read.nextInt();
    JOptionPane.showMessageDialog(null, temp);

在文件 usercount.txt 我有一个整数 2 但它没有读取。我在读取文件之前关闭文件。

2

是文件usercount.txt的内容

Exception in thread "AWT-EventQueue-0" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:862)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at REGISTER$REGISTER_ACTION.actionPerformed(REGISTER.java:343)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6533)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6298)
at java.awt.Container.processEvent(Container.java:2236)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
at java.awt.Container.dispatchEventImpl(Container.java:2280)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

是我运行代码时遇到的错误

【问题讨论】:

  • 可以发一下文件内容吗?

标签: java exception int java.util.scanner


【解决方案1】:

你必须让java知道它会从一个文件中读取

 Scanner in_read;
    in_read = new Scanner(new File("usercount.txt"));

    int temp = in_read.nextInt();
    JOptionPane.showMessageDialog(null, temp);

如果文件不存在,将需要抛出一个 IO 异常

更新 如果文件有空格 这样做

 Scanner in_read;
        in_read = new Scanner(new File("usercount.txt"));

        int temp = Integer.parseInt(in_read.next().trim());
        JOptionPane.showMessageDialog(null, temp);

【讨论】:

  • 发布文件内容
  • 文件内容为第1行整数2
  • @DRodriguez 如果是这样的话,它不会给出错误。编辑帖子,并完全按照文件中的内容提供。
  • 当没有任何空格时,这出于某种奇怪的原因。 ¯_(ツ)_/¯ 谢谢
  • 请接受这个答案,以帮助其他遇到此问题的人
【解决方案2】:

实际上你在调用.nextInt() 方法时得到了NoSuchElementException 异常,因为Java 试图获取一个int 值但它没有找到它,它清楚地推断出文件内容无法读取为int

您只需要确保扫描仪有下一个元素:

Scanner in_read;
in_read = new Scanner("usercount.txt");

int temp = 0;

if(in_read.hasNextInt()) temp = in_read.nextInt();
JOptionPane.showMessageDialog(null, temp);

当您编写 if(in_read.hasNextInt()) 时,它总是会在尝试读取 int 值之前进行测试,因此它不会触发异常。

编辑:

如果您不确定内容是否为int,则不能不检查hasNextInt() 就直接调用nextInt(),但可以调用.next()

【讨论】:

  • int temp=null 认真的吗?
  • 那里有一个元素,文件在尝试读取之前关闭。我不知道为什么会得到它,但由于某种原因,程序读取它时出现空白,但文件中没有。
  • @DRodriguez 否,如果2 包裹在空格之间,则不会有nextInt(),也许.next() 会得到一个值,但它不是int
  • @chsdk 文件中没有任何空格,这是我开始收到此错误时检查的第一件事。出于某种原因 .trim 正在为我工​​作。只是想得到这个项目,谢谢。如果我以后再遇到这个,我会参考这篇文章。
  • @DRodriguez 如果.trim() 正常工作,则意味着您的文本中有一些空格。
【解决方案3】:

已解决:

  FileReader fileReader = new FileReader("usercount.txt");
  int temp;

    try {
   Scanner s= new Scanner(fileReader);

 while(s.hasNext()){
          if (s.hasNextInt()) {
        temp = s.nextInt();
        System.out.println("int: " + temp);
        JOptionPane.showMessageDialog(null, temp);
             }
           }
        fileReader.close();
    } 
    catch (FileNotFoundException e) {
        e.printStackTrace();
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-04
    • 1970-01-01
    • 2015-05-07
    • 1970-01-01
    • 1970-01-01
    • 2011-12-03
    • 1970-01-01
    • 2016-06-12
    相关资源
    最近更新 更多