我想编写一个代码,用于从csv文件中删除一些列。有一个包含行和列的csv文件。我想搜索第一行中编号为零的列并删除它们并构建新的csv文件。我尝试将csv文件写入字符串数组,然后在第一行数组中搜索。
如果列中有零,请将其删除。最后构建一个新的csv文件。
这是我的代码:
public class removezero {
public static void main(String[] args) throws Exception {
//scanner to read csv file
Scanner replace = new Scanner(new File("csvfile"));
//array of string
String [][] all= new String [5][5];
//new csv file to write answer
FileWriter removezero = new FileWriter(createReplacedCsv());
int i=0;
StringBuilder builder = new StringBuilder();
//write csv to array
while (replace.hasNext()) {
String[] result = replace.nextLine().split(",");
all[i]= result;
i++;
}
// write from array to builder
for(int j=0;j<5; j++){
for(int k=0;k<5; k++)
if(!(all[1][k]).equals("0")){builder.append(all[j][k]).append(",");}
builder.deleteCharAt(builder.lastIndexOf(","));
builder.append("\n");
}
//write to csv file
removezero.write(builder.toString());
removezero.flush();
removezero.close();
}
private static File createReplacedCsv() throws Exception {
File replacedCsv = new File("removedzero.csv");
replacedCsv.createNewFile();
return replacedCsv;
}
}
答案 0 :(得分:0)
您的代码问题是以下行的结果:
int col = replace.nextLine().length();
由于Scanner
是单向迭代器(有关更多详细信息,请参见此处:Using scanner.nextLine()),为获取列数而执行的额外调用意味着在循环中读取CSV文件时得到的元素少于countLines
预期的元素,并且在空迭代器上调用nextLine
会得到错误。