循环遍历文本文件以使用strinkTokenizer查找字符串

时间:2015-03-23 12:48:37

标签: java while-loop stringtokenizer

我正在尝试遍历一个文本文件,根据我的逻辑,它应该循环,而line,不是null,然后在该循​​环的另一个while loop内,它应该循环通过该行虽然变量不等于我的命令行参数之一,然后它应该采取该行的第一个标记并将其添加到该变量。但每次我运行代码时都没有这样的元素异常,我不明白为什么?

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

1 个答案:

答案 0 :(得分:0)

nextToken()

  

NoSuchElementException - 如果没有更多令牌,则抛出此异常   这个tokenizer的字符串

在此代码中

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

                id = st.nextToken();
            }

您的循环将继续,直到您的while条件(while(!id.equals(args[0])))失败。因此,请在args[0]之前检查id 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字符串应为{{1}}