我使用Scanner方法读取Java中的csv文件。并希望跳过输出中的空行。
我应该使用什么方法?
Scanner s=new Scanner(new File("file location"));
s.useDelimiter(",");
while(s.hasNext()){
System.out.print(s.next());
System.out.print("|");
System.out.print("\t");
}
s.close();
答案 0 :(得分:0)
答案 1 :(得分:0)
如果一行为空,它将在文件的该行中包含(col - 1)分隔符。
例如,对于5列,空行将是第2行,其中(5-1)= 4个分隔符:
line1: 5,4,3,2,1
line2: ,,,,
line3: 1,2,3,4,5
因此,扫描每一行,按分隔符拆分,并忽略除非行的长度大于列数 - 1。
Scanner s=new Scanner(new File("file location"));
while(s.hasNextLine()){
String line = s.nextLine();
String[] cols = line.split(",");
// if every col is empty, the line will equal col-1 delimiters.
if(line.length() > cols.length - 1){
for(String str : cols){
System.out.print(str);
System.out.print("|");
System.out.print("\t");
}
}
}
s.close();
答案 2 :(得分:0)
如果您尝试为length
打印s.next()
,则可以找出造成这种情况的原因。它是由行尾字符\r
和\n
引起的。因此,删除它们将产生预期的结果。
Scanner s=new Scanner(new File("1.csv"));
s.useDelimiter(",");
String contentRead="";
while(s.hasNext()){
contentRead = s.next().replaceAll("\\r","");
contentRead = contentRead.replaceAll("\\n","");
if(!contentRead.isEmpty()){
System.out.print(contentRead);
System.out.print("|");
System.out.print("\t");
}
}
s.close();
答案 3 :(得分:0)
使用以下代码解决您的问题,并在使用扫描仪
读取CSV时跳过空行String line = "";
while (s.hasNext()) {
if (!(line = s.nextLine()).isEmpty()) {
System.out.print(line);
System.out.print("|");
System.out.print("\t");
}
}
答案 4 :(得分:0)
Scanner类中没有可用的方法来实现此目的。
这里,而不是使用“,”作为分隔符,使用“\ n”作为分隔符。 这将有助于您在每次迭代中获得特定的行内容。
然后,您可以验证该特定行的内容是否适合您并按要求继续。
s.useDelimiter("\n");
while(s.hasNext())
{
line = s.next();
System.out.println("\nNext Line :" +line);
//Here, tokenize the line and verify if any non-empty token exists
}
答案 5 :(得分:0)
CSV可能很棘手:
个别值可能包含换行符分隔符(例如v1,“v2 [\ n]和新行”,v3):如果使用nextLine()等效,则表示您赢了t正确解析数据。
个别值可能包含分隔符(例如v1,“v2 [,]和更多东西”,v3):在这种情况下简单地依赖split()等效将产生多个值而不是一个。
在多个平台上无法正确处理换行符(例如v1“v2 [\ r \ n]和新行”,v3):如果你在Linux中解析它或MACOS第二列将被解析为在 v2 和之间产生一个空行和一个新行(即你将得到3行而不是2行)。
使用uniVocity-parsers附带的CSV解析器可靠地处理这些情况:
CsvParserSettings settings = new CsvParserSettings(); // many options here, check the tutorial.
settings.getFormat().setLineSeparator("\r\n");
CsvParser parser = new CsvParser(settings);
List<String[]> allRows = parser.parseAll(new FileReader(new File("path/to/file.csv")));
披露:我是这个图书馆的作者。它是开源和免费的(Apache V2.0许可证)。