【问题标题】:Why is the file reading the last line of a row and the first one of the second row为什么文件读取一行的最后一行和第二行的第一行
【发布时间】:2019-07-01 20:09:36
【问题描述】:

使用带逗号分隔符的扫描仪读取 Excel CSV 文件时,它会读取第一行的最后一个节点,但同时也会读取下一行的第一个节点。

            int counter = 0;
            String[] u = new String[3];
            for (int j = 1; j <= 3; j++) {
                String a = in.next();
                u[counter] = a;
                counter++;
            }
        }

使用 Debugger 后,我注意到当它到达最后一个元素时,它会将它们组合成类似 -14256\r\n-14323

-14256 = 第一行的最后一个元素 -14323 = 下一行的第一个元素

【问题讨论】:

  • 顺便说一句,您可以考虑将读取/写入数据文件的日常琐事委托给诸如Apache Commons CSV之类的库。

标签: java file csv java.util.scanner


【解决方案1】:

扫描程序仅将逗号作为分隔符。但是您希望它也接受行尾作为另一个分隔符。

我假设您使用 Scanner::useDelimiter 像这样实例化 Scanner:

Scanner s = new Scanner( inputStream ).useDelimiter( "," );

如果我得到了正确的模式定义,它应该是:

Scanner s = new Scanner( inputStream ).useDelimiter( ",|\\R" );

\R 代表

换行符匹配器:任何 Unicode 换行符序列,等价于 \u000D\u000A|[\u000A\u000B\u000C\u000D\u0085\u2028\u2029]

有关详细信息,请参阅java.util.regex.Pattern 的文档。

【讨论】:

    【解决方案2】:

    CSV 文件包含文本行,其中每行包含用逗号分隔的值。因此,我建议您逐行阅读文件,然后 split 逗号上的每一行。有点像...

    java.io.FileReader fr = new java.io.FileReader("path to file");
    java.io.BufferedReader br = new java.io.BufferedReader(fr);
    String line = br.readLine();
    while (line != null) {
        String[] fields = line.split(",");
        // Add code here to handle the "fields".
        line = br.readLine();
    }
    

    请注意,上面的代码不是一个完整的解决方案,而是一个起点。比如我没有关闭BufferedReader。

    【讨论】:

    • 或者只是Files.lines()。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-31
    相关资源
    最近更新 更多