java - 为什么我的程序在线程 "AWT-EventQueue-0"java.util.NoSuchElementException 中显示异常?

标签 java

我有一个程序,让用户输入字符串和分隔符,然后程序将根据用户的分隔符分割字符串,并在 joption 中显示不包含分隔符的字符串。

但是 joption 没有显示输出,因为错误显示:

Exception in thread "AWT-EventQueue-0" java.util.NoSuchElementException
    at java.util.Scanner.throwFor(Scanner.java:862)
    at java.util.Scanner.next(Scanner.java:1371)

我该怎么办?

public ArrayList<String> token()
    {

       String str=txtString.getText().toString();
       String del=txtDelimiter.getText().toString();
       ArrayList <String> myTokens = new ArrayList <String> ();

       Scanner scan = new Scanner(str);
       scan.useDelimiter(del);

       while(scan.hasNext()){
        System.out.println(scan.next());
        myTokens.add(scan.next());
        }
       scan.close();
       return myTokens; 
    }

从另一个方法调用的方法:

btnShowTokens.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                ArrayList <String> stringpass=token();

                JOptionPane.showMessageDialog (null, stringpass, "The posible tokens", JOptionPane.INFORMATION_MESSAGE);
            }
        });

最佳答案

调用 next() 会消耗来自扫描器的 token 。因此,在这里,循环的每次迭代都会尝试从扫描仪获取两个 token - 一个用于打印,一个用于添加到 myTokens。如果您有奇数个 token ,您将收到此异常。

更好的方法是将 token 提取到局部变量,然后在需要的地方使用它。例如:

while (scan.hasNext()) {
    String str = scan.next();
    System.out.println(str);
    myTokens.add(str);
}

关于java - 为什么我的程序在线程 "AWT-EventQueue-0"java.util.NoSuchElementException 中显示异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47003386/

相关文章:

java - Tomcat servlet 在第一次请求之前不会启动

java - Spring 和GAE : ExceptionInInitializerError

java - 跟踪类(class)中已租用和可用的汽车数量

java - 同一 session 中 Sessionscoped Bean 的多个实例

java - com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException 不允许公钥检索

java - 尝试从文件读取整数时出现 NoSuchElementException?

java - Spring - 类路径资源中的相对路径

java - 属性文件反斜杠和分号

java - JDBC - setAutoCommit 只读操作

java - 我的应用程序崩溃了java.lang.nullpointerexception