继续获得Java异常:NoSuchElementException

时间:2014-05-07 00:36:23

标签: java main

编译时我一直得到同样的异常。任何人都可以解释为什么我一直得到这个错误,它意味着什么或我需要做什么? 我想知道我将来做错了什么。

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)

2 个答案:

答案 0 :(得分:0)

你正在穿越溪流。

您正在循环Scanner,但检查nextToken()上的StringTokenizer

您没有遵循Sun Java编码标准:方法名称应以小写字母开头。

这种方法做得太多了:

  1. 读取硬编码文件路径。
  2. 标记每一行
  3. 打印字符串列表。
  4. 糟糕的主意。

    尝试更像这样的事情:

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

答案 1 :(得分:0)

您正在调用token.nextToken()而不检查token中是否存在更多令牌。

不应检查infile是否包含更多元素,而应检查token是否包含更多代币。

而不是

while (infile.hasNext()) { ...

你应该做

while (token.hasMoreTokens()) { ...

有关更多信息和代码示例,请参阅Oracle's Java documentation on StringTokenizer