有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java字符串标记器在读取文件时不将第二行上的字符串注册为标记,尽管使用了。nextToken()

我正在读一个文件。所讨论的文件有两个字符串,一个在自己的行上,如下所示:

COMETQ
HVNGAT

我试图将每个字符串分配给它自己的字符串变量。然而,当我运行我的代码(如下所示)时,我得到了第二个NoTouchElementException。nextToken()

    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) 个答案

  1. # 1 楼答案

    你只说了一句话:

    new StringTokenizer(f.readLine());
    

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

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

  2. # 2 楼答案

    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
    

    希望这对你有帮助:)