程序入口点-不断得到Java异常:NoSuchElementException



我在编译时一直得到相同的异常。有人能解释为什么我一直得到这个错误,这意味着什么,或者我需要做什么?我想知道我做错了什么,以便将来参考。

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编码标准:方法名应该以小写字母开头。

这个方法做得太多了:

  1. 读取硬编码文件路径
  2. 标记每行
  3. 打印字符串列表

坏主意。

试试这样写:

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;
}

相关内容

  • 没有找到相关文章

最新更新