我得到一个NoSuchElementException,现在调试它时,我注意到正确创建了Car和Carmap并正确存储了值,因此我不确定ST看不到哪个下一个标记?还是看到不再有令牌时何时停止。

感谢所有的投入。

    Carmap = new HashMap<String,Car>();
    //Change file path accordingly
    File f = new File("C:\\XXX\\XXX\\XXX\\CarFaxDB.txt");
    //Check to see if file exists, else create file
    if (f.exists()){
        String data[] = readFile(f);
        for (int i =0; i<data.length; i++){

            if (data[i] != null){
                if (i>0){
                    String line = data[i];
                    StringTokenizer st = new StringTokenizer(line,",");
                    String VIN = st.nextToken();
                    String carMake = st.nextToken();
                    String carModel = st.nextToken();
                    int carYear = Integer.parseInt(st.nextToken());
                    data[i]= line;
                    Car car = new Car(VIN, carMake, carModel, carYear);
                    Carmap.put(car.getVIN(), car);
                }
            }
        }

    }

最佳答案

由于您正在尝试使用nextToken(),但令牌生成器没有更多令牌,因此出现错误。

在执行nextToken()之前,应检查是否有更多令牌。您可以使用hasMoreTokens()方法执行此操作。

另外,您应该检查是否获得非空的line并开始打印它,以查看它是否具有所需的所有令牌。

这是更正的代码段:

Carmap = new HashMap<String,Car>();

//Change file path accordingly
File f = new File("C:\\Users\\XXX\\Documents\\CarFaxDB.txt");

//Check to see if file exists, else create file
if (f.exists()){
    String data[] = readFile(f);
    for (int i = 0; i < data.length; i++){

        if (data[i] != null){
            if (i > 0){
                String line = data[i];

                if(!StringUtils.isEmpty(line)) {
                    System.out.println(line);
                    StringTokenizer st = new StringTokenizer(line,",");

                    /* Check For More Tokens */
                    String VIN = st.hasMoreTokens() ? st.nextToken() : null;
                    /* Check For More Tokens */
                    String carMake = st.hasMoreTokens() ? st.nextToken() : null;
                    /* Check For More Tokens */
                    String carModel = st.hasMoreTokens() ? st.nextToken() : null;
                    /* Check For More Tokens */
                    int carYear = st.hasMoreTokens() ? Integer.parseInt(st.nextToken()) : 0;
                    data[i] = line;

                    Car car = new Car(VIN, carMake, carModel, carYear);
                    Carmap.put(car.getVIN(), car);
                }
            }
        }
    }
}

10-04 21:02