我在编译时一直得到相同的异常。有人能解释为什么我一直得到这个错误,这意味着什么,或者我需要做什么?我想知道我做错了什么,以便将来参考。
public static void Second()
{
int n = stringList.listSize();
for(int i=0; i<n-1; i=i+2)
{
System.out.println(stringList.retrieveAt(i) + " " + stringList.retrieveAt(i+1));
}
}
public static void Display()throws IOException, FileNotFoundException
{
Scanner infile = new Scanner(new FileReader("D:\DataFile.txt"));
StringTokenizer token = new StringTokenizer(infile.nextLine());
StringElement str = new StringElement();
while(infile.hasNext())
{
str.setString(token.nextToken());
stringList.insert(str);
}
stringList.print();
}
例外:
Exception in thread "main" java.util.NoSuchElementException
at java.util.StringTokenizer.nextToken(StringTokenizer.java:349)
at Programmmmmm.Display(Programmmmmm.java:121)
at Programmmmmm.main(Programmmmmm.java:67)
您调用token.nextToken()
时没有检查token
中是否实际上有更多的令牌
与其检查infile
是否有更多的元素,不如检查token
是否有更多的token。
代替
while (infile.hasNext()) { ...
你应该做
while (token.hasMoreTokens()) { ...
参见Oracle的Java文档StringTokenizer
获取更多信息和代码示例
你正在过河。
您正在循环Scanner
,但在StringTokenizer
上检查nextToken()
。
你没有遵循Sun Java编码标准:方法名应该以小写字母开头。
这个方法做得太多了:
- 读取硬编码文件路径
- 标记每行
- 打印字符串列表
坏主意。
试试这样写:
public static List<String> tokenizeTextFile(String path) throws IOException, FileNotFoundException {
List<String> words = new ArrayList<String>();
BufferedReader br = null;
if (path != null && path.length() > 0) {
try {
br = new BufferedReader(new FileReader(path));
String line;
while ((line = br.nextLine()) != null) {
String [] tokens = line.split("\s+");
for (String token : tokens) {
words.add(token);
}
} finally {
close(br); // add this method.
}
}
return words;
}