Java - 文件读取 - 没有这样的元素异常

时间:2018-02-03 01:57:53

标签: java java.util.scanner

我有以下代码来计算文件中用户定义的标识符的数量(例如,用户定义的变量和方法)。所以它需要跳过诸如" main","如果"等等...等标记。

然而,当我运行以下程序时,我得到一个"没有这样的元素异常"在第30行(我称之为regexChecker()方法)。这是我的代码。

import java.io.*;
import java.util.*;
import java.util.regex.*;

public class A1_104623455 {

    private static int idCount = 0;
    private static ArrayList<String> ids = new ArrayList<String>();
    private static ArrayList<String> identifierCnt = new ArrayList<String>();
    private static File file = new File("A11-input.txt");
    private static File file2 = new File("A11-output.txt");
    private static Scanner s;
    private static PrintWriter pw;

    public static void main (String args[]) {

        try {
            s = new Scanner(file);
            pw = new PrintWriter(file2);
            StringTokenizer st;

            while(s.hasNext()) {
                st = new StringTokenizer(s.nextLine());
                while(st.hasMoreTokens()) {
                    str = st.nextToken();
                    if(!str.equals("int") && !str.equals("main") &&
                       !str.equals("printf") && !str.equals("return") &&
                       !str.equals("%d")) {
                            regexChecker("[A-Za-z_][A-Z-a-z_0-9]*", st.nextToken());
                    }
                }
            }
            System.out.println("\n" + ids.size() + " valid identifiers");
            pw.print("\n" + ids.size() + " valid identifiers");

            pw.close();
        }
        catch(IOException e) {
            System.out.println("file not found");
        }
    }

    public static void regexChecker(String regex, String str) {
        Pattern pattern = Pattern.compile(regex);
        Matcher regexMatcher = pattern.matcher(str);

        if(regexMatcher.find()) {
            if(!ids.contains(regexMatcher.group())) {
                System.out.println(regexMatcher.group());
                ids.add(regexMatcher.group());
                pw.print(regexMatcher.group() + "\n");
            }

        }
    }
}

如果我取出包含regexpChecker()的if语句,程序就可以运行。我不确定导致此错误的原因。

我非常感谢你的帮助。

感谢。

编辑:

这是我正在测试的A11-input.txt文件的内容

int main(){
    int number = 7;

    if( number%2 == 0 )
        printf("%d is an even integer.",number);
    else
        printf("%d is an odd integer.",number);
    return 0;

}

1 个答案:

答案 0 :(得分:2)

问题是在while块中,nextToken()方法被调用两次。所以在最后一次迭代中,它会被抛出一个NoSuchElement异常。

 while(st.hasMoreTokens()) {
   str = st.nextToken();
   if(!str.equals("int") && !str.equals("main") &&
      !str.equals("printf") && !str.equals("return") &&
      !str.equals("%d")) {
          regexChecker("[A-Za-z_][A-Z-a-z_0-9]*", st.nextToken());
   }
 }