尽管使用.nextToken(),但在读取文件时,字符串令牌生成器并未将第二行字符串作为令牌注册

时间:2019-07-20 02:53:01

标签: java stringtokenizer

我正在尝试读取文件。有问题的文件有两个字符串,一个在其自己的行上,如下所示:

COMETQ
HVNGAT

我正在尝试将每个字符串分配给其自己的String变量。但是,当我运行下面的代码时,第二个.nextToken()会出现NoSuchElementException。

    BufferedReader f = new BufferedReader(new FileReader("ride.in"));
    PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("ride.out")));

    StringTokenizer st = new StringTokenizer(f.readLine());

    String comet = st.nextToken();
    String group = st.nextToken();

有人可以帮助我找出问题所在吗?谢谢!

注意:这是USACO培训页面的问题。我只是想寻求帮助来调试文件读取,而不是解决问题。

2 个答案:

答案 0 :(得分:0)

您只给了它一行:

new StringTokenizer(f.readLine());

您必须首先从文件中读取所有行,然后将结果字符串传递给构造函数。

注意:在这种情况下,您甚至不必使用StringTokenizer。只需使用BufferedReader

答案 1 :(得分:0)

当文本包含定界符并且您想拆分时,应使用

StringTokenizer。您还可以使用split()方法。

语法:

StringTokenizer stringTokenizer = new StringTokenizer(text, delimiter);

例如:

StringTokenizer stringTokenizer = new StringTokenizer("abc, def", ",");

但是在您的文件中,字符串中没有这样的分隔符。因此,StringTokenizer在这里没有用。

我已经对此进行了测试:

            BufferedReader bufferedReader = new BufferedReader(new FileReader(new File("F:/test.txt")));
            String line;
            String extracted = "";
            while ((line = bufferedReader.readLine()) != null) {
                StringTokenizer stringTokenizer = new StringTokenizer(line);  
                while (stringTokenizer.hasMoreElements()) {
                    extracted = extracted + stringTokenizer.nextElement().toString() +",";
                }
            }
            bufferedReader.close();
            String[] splits = extracted.split(",");
            String comet = splits[0];
            String group = splits[1];
            System.out.println(comet + " " + group);

输出:

COMETQ HVNGAT

希望这对您有所帮助:)