如果第一个字段为空,则在Java中解析CSV文件并跳过下一行

时间:2016-08-25 12:55:45

标签: java parsing

我使用的是Java,我有一个包含10列和5行的CSV文件。我想用这个条件将它解析成另一个CSV文件。如果来自任何行的第一个单元格为空,则跳过该行,然后跳转到下一行,依此类推。我的代码只读取所有行并打印它们,我想要具备该条件并写入另一个CSV文件。

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class CSV {
public static void main(String[] args) throws FileNotFoundException {
    String x;
    Scanner scanner = new Scanner(new File("Book1.csv"));
    scanner.useDelimiter(",");
    while(scanner.hasNext()){

            System.out.print(scanner.next());

    }
    scanner.close();
}

}

示例:

请参阅附图。
enter image description here

2 个答案:

答案 0 :(得分:1)

不是分隔整个文件,而是逐行分隔:

public static void main(String[] args) throws FileNotFoundException {
    String x;
    Scanner scanner = new Scanner(new File("Book1.csv"));
    while(scanner.hasNextLine()){                // If there is another line in the file
        x = scanner.nextLine();                  // Extract that line
        String[] values = x.split(",");          // Split that line at the commas
        if (!values[0].equals("")) {             // If the first value is not equal to empty
            System.out.print(x);                 // Print the line
        }
    }
    scanner.close();
}

答案 1 :(得分:1)

您可以利用每条记录不同的事实。因此,您可以使用BufferedReader#readLine()检索完整行,而不是直接在Scanner上使用File类:

BufferedReader br = new BufferedReader(new FileReader("Book1.csv"));
String myLine = br.readLine();
while (myLine != null) {
    // do whatever you want with the line

    // read new line
    myLine = br.readLine();
}

这样myLine包含如下字符串:

"John,M,Mi,1111,US,OR,..."
",David,criss,2222,US,MI,..."

一旦你有一行,trim()就行,并检查第一个字符是否是你的分隔符。在这种情况下,该行应该被忽略。

myLine = myLine.trim();
if (",".equals(myLine.at(0))) {
    // First field empty. Ignore
} else {
    // First field not empty. Write to new file
}