我得到一个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);
}
}
}
}
}