检查.csv单元格是否为空

时间:2016-03-12 19:12:24

标签: java csv

我正在尝试将.csv表添加到我的2d数组中,但是想要整理掉所有空单元格。

这就是我的代码目前的样子:

try {
        BufferedReader reader = new BufferedReader(new FileReader(upload.pathName));
        String strLine;

        for (int i = 0; (strLine = reader.readLine()) != null; i++) {
            Scanner scanner = new Scanner(strLine);
            scanner.useDelimiter(";");
            int j = 0;
            while (scanner.hasNext()) {
                try {
                    if (scanner.next() == null || scanner.next().equals("")) {
                        System.out.println("this cell is empty");
                        j++;
                    } else {
                     array[i][j] = scanner.next();
                     j++;
                    }
                } catch (Exception e) {
                    System.out.println(e.getMessage());
                }
            }
            scanner.close();
        }
        reader.close();
    } catch (Exception abcdefg) {
        //Exception
    }

我的.csv看起来像这样:

value1;value2;value3;value5;value6;value7
value8;value9;value10;...

这条线甚至可以工作吗?:

if (scanner.next() == null || scanner.next().equals("")) 

有人知道为什么我只使用if(scanner.next()== null)或者if(scanner.next()。equals(""))j循环直到它有值5然后激活Exception abcdefg,但是当我使用if时(scanner.inxt()== null || scanner.next()。equals(""))j只循环直到它有值3然后触发异常abcdefg

我错过了什么/我的错误在哪里?为什么它会跳进Exception,即使还有一些非空的单元格?

2 个答案:

答案 0 :(得分:3)

您的if条件没问题,但您不想再拨打scanner.next()两次,这样会吃掉'一些输入。

您可能希望将scanner.next()的值设置为变量,然后检查if条件中的变量值:

String input = scanner.next(); 
if(input == null || input.equals("")){
    //Do something
}

答案 1 :(得分:1)

scanner.next()值存储到如下变量中。在条件中使用变量。由于您正在调用next()两次,因此指针移动两次。

String value = Scanner.next()

为什么不使用https://commons.apache.org/proper/commons-csv/user-guide.html之类的内容来阅读CSV。有许多这样的库可用于读取CSV文件。