Java 使用strinkTokenizer在文本文件中循环查找字符串

Java 使用strinkTokenizer在文本文件中循环查找字符串,java,while-loop,stringtokenizer,Java,While Loop,Stringtokenizer,我试图循环一个文本文件,根据我的逻辑,它应该循环while,line不是null,然后在循环中的另一个while循环中,当一个变量不等于我的一个命令行参数时,它应该在该行中循环,然后它应该获取该行的第一个标记并将其添加到该变量中。但是每次我运行代码时,我都没有得到这样的元素异常,我不明白为什么 try { FileReader fr = new FileReader(file); BufferedReader br = new BufferedReader(fr)

我试图循环一个文本文件,根据我的逻辑,它应该循环while,line不是null,然后在循环中的另一个while循环中,当一个变量不等于我的一个命令行参数时,它应该在该行中循环,然后它应该获取该行的第一个标记并将其添加到该变量中。但是每次我运行代码时,我都没有得到这样的元素异常,我不明白为什么

try {
        FileReader fr = new FileReader(file);
        BufferedReader br = new BufferedReader(fr);
        String line = br.readLine();
        String id = new String();
        StringTokenizer st = new StringTokenizer(line, ",");
        while(line != null){
            while(!id.equals(args[0])){
                line = br.readLine();
                id = st.nextToken();
            }
        }

    } catch (FileNotFoundException e) {
        System.out.println("file not found");
    } catch (IOException e) {
        System.out.println("not a string");
    }
该文件如下所示:

第1行:118,s,m,p

第2行:111,s,m,c下一行

NoTouchElementException如果没有更多令牌,则会抛出该异常 这个标记器的字符串

按此代码

while(!id.equals(args[0])){

                id = st.nextToken();
            }
您的循环将持续到您的while条件while!id.equalsargs[0]失败。因此,在您的while条件之前,通过在控制台上打印来检查您的id为的args[0]

稍微修改一下代码

 String line ="";
        String id = new String();

    while((line = br.readLine())!= null){
     StringTokenizer st = new StringTokenizer(line, ",");
        while(!id.equals(args[0])){

            id = st.nextToken();
        }
    }

您的文件包含118,s,m,p。。后面一个空格,所以我想您的tockenizer字符串应该是,

在检查第一行上的任何标记之前,您正在阅读第二行。可能您想移动line=br.readLine;在内环之后。