从csv文件中删除一些列java

时间:2014-05-31 19:47:11

标签: java csv

我想编写一个代码,用于从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;
    }


   }

1 个答案:

答案 0 :(得分:0)

您的代码问题是以下行的结果:

int col = replace.nextLine().length();

由于Scanner是单向迭代器(有关更多详细信息,请参见此处:Using scanner.nextLine()),为获取列数而执行的额外调用意味着在循环中读取CSV文件时得到的元素少于countLines预期的元素,并且在空迭代器上调用nextLine会得到错误。