java - 使用 opencsv (java) 读取 .csv 文件时跳过空行

标签 java arrays csv

大家好! 我的目标是让 csv 阅读器在解析文件时跳过空行,基本上什么都不做,只让我得到至少有一个值的行。 目前我有两种方法 -> 第一种只是将所有行读取为字符串数组列表并返回它,第二种将结果转换为字符串列表列表,两者如下所示:

private List<String[]> readCSVFile(File filename) throws IOException {

    CSVReader reader = new CSVReader(new FileReader(filename));
    List<String[]> allRows = reader.readAll();

    return allRows;

}

public List<List<String>> readFile(File filename) throws IOException {

        List<String[]> allRows = readCSVFile(filename);     
        List<List<String>> allRowsAsLists = new ArrayList<List<String>>();      
        for (String[] rowItemsArray :  allRows) {
            List<String> rowItems = new ArrayList<String>();
            rowItems.addAll(Arrays.asList(rowItemsArray));
            allRowsAsLists.add(rowItems);

        }
    return allRowsAsLists;

}

我的第一个想法是检查(在第二种方法中)数组的长度,如果它是 0 只是为了忽略它 - 这将是这样的:

for (String[] rowItemsArray :  allRows) {
            **if(rowItemArray.length == 0) continue;**
            List<String> rowItems = new ArrayList<String>();
            rowItems.addAll(Arrays.asList(rowItemsArray));
            allRowsAsLists.add(rowItems);

}  

不幸的是,这没有用,因为即使该行是空白的,它仍然返回一个元素数组——实际上是空字符串。检查单个 String 不是一个选项,因为有 100 多个列并且这是可变的。 请建议实现此目标的最佳方法是什么。 谢谢。

这样整理:

    public List<List<String>> readFile(File filename) throws IOException {

            List<String[]> allRows = readCSVFile(filename, includeHeaders, trimWhitespacesInFieldValues);       
            List<List<String>> allRowsAsLists = new ArrayList<List<String>>();      
            for (String[] rowItemsArray :  allRows) {
                **if(allValuesInRowAreEmpty(rowItemsArray)) continue;**
                List<String> rowItems = new ArrayList<String>();
                rowItems.addAll(Arrays.asList(rowItemsArray));
                allRowsAsLists.add(rowItems);

            }
            return allRowsAsLists;

        }

    private boolean allValuesInRowAreEmpty(String[] row) {
        boolean returnValue = true;
        for (String s : row) {
            if (s.length() != 0) {
                returnValue = false;
            }
        }
        return returnValue;
    }

最佳答案

您可以检查长度和第一个元素。如果该行仅包含一个字段分隔符,则长度 > 1。如果该行包含单个 space 字符,则第一个元素不为空。

if (rowItemsArray.length == 1 && rowItemsArray[0].isEmpty()) {
    continue;
}

关于java - 使用 opencsv (java) 读取 .csv 文件时跳过空行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28088211/

相关文章:

Java BMP 头文件

arrays - 按 SWIFT 顺序从数组中进行 PFQuery

c - 结构数据日志无法正常工作?

c - 删除基于结构的数组中的最后一个单元格

python - 读取 CSV 文件并将其插入 python 中的二维列表

java - Krajee 设计的 Bootstrap 文件输入 JQuery 插件(SyntaxError : Unexpected end of input)

java - 发送电子邮件后如何 toast ?

java - 发送 TCP/IP 消息 AKKA actor

python - 使用 Python 设置 CSV 列中不同类型数据的格式

c# - 如何对 CSV 文件使用 SQL