为什么在线程“main”java.util.NoSuchElementException中出现异常?

时间:2016-12-06 04:10:32

标签: java exception

import java.io.*;
import java.util.*;


public class chopMiddle {

    public static void main(String[] args) {
        String sample = "1,2,3,4,5";
        StringTokenizer tokenizer = new StringTokenizer(sample, ",");

        while(tokenizer.hasMoreTokens()) { 
            int convertedToInt = Integer.parseInt(tokenizer.nextToken());

            int [] array = new int [3]; 

            for(int i = 0; i < array.length; i++)
            {
                array[i] = Integer.parseInt(tokenizer.nextToken());
                System.out.println(array[i] + " ");
            }
         }
     } 
 }

我尝试将字符串分解为标记,并使用Integer.parseInt方法将标记转换为int值。 我想返回一个大小为3的数组,其中包含从字符串到调用者的第2到第4个整数的int值。我做错了什么,因为它在编译时显示在下面的消息

Exception in thread "main" java.util.NoSuchElementException
at java.util.StringTokenizer.nextToken(StringTokenizer.java:349)
at chopMiddle.main(chopMiddle.java:18)

3 个答案:

答案 0 :(得分:4)

问题是当它到达第5个令牌时,它会读取它,然后创建一个新阵列并尝试再读3个。

阅读完第二,第三和第四后,你应该打破两个循环。

答案 1 :(得分:2)

while(tokenizer.hasMoreTokens()) { 
    int convertedToInt = Integer.parseInt(tokenizer.nextToken());

    int [] array = new int [3]; 

    for(int i = 0; i < array.length && tokenizer.hasMoreTokens(); i++) //check hasMoreTokens
    {
        array[i] = Integer.parseInt(tokenizer.nextToken());
        System.out.println(array[i] + " ");
    }
}

每次拨打电话时都需要检查:tokenizer.nextToken()

答案 2 :(得分:1)

如果您检查tokenizer循环中for是否包含更多元素,那么您根本不需要while循环。

尝试以下示例:

public static void main(String[] args) {
        String sample = "1,2,3,4,5";
        StringTokenizer tokenizer = new StringTokenizer(sample, ",");

        int[] array = new int[3];

        for (int i = 0; i < array.length && tokenizer.hasMoreTokens(); i++) {
            array[i] = Integer.parseInt(tokenizer.nextToken());
            System.out.println(array[i] + " ");
        }

    }