一个csv文件或者Stringbuffer是如此的内容A, [email protected],  ,  , 8877
B, [email protected], ,  ,  333
C, [email protected], ,   , 
D,       ,  ,   , 3333如何以最快速度把那些空列删除,最终应该是以下格式A, [email protected], 8877
B, [email protected],333
C, [email protected],
D,        ,3333我试过以下方法:先在第一次循环里,用一个HashMap记录每个列的总和,然后遍历整个HashMap,找出那些空列的索引号,最后一次循环里遇到空列的索引就跳过但这样子速度很慢,5万行的记录要2分钟才能最终完成,因为在每一行的遍历过程中都要对Hashmap进行操作,增加了时间复杂度, 有没其他好的办法?

解决方案 »

  1.   

    不需要用HashMapint[] counter = new int[colSum]; //colSum是最大列数遍历一次,装入String[][],对任何一个非空字段,假设它是第x列,counter[x]++遍历结束后counter[i]==0的就是空列,清除该列。
      

  2.   

    可以使用 BitSet。 非空为true,空为false。调用 or 的结果 false 对应 空列。
      

  3.   

    1L的也可以改成用布尔型的
    String[][] data ={二维数组信息};
    boolean[] colEmpty = new int[colCnt];
    Arrays.fill(colEmpty, true);
    for (int i=0; i<data.length; i++) {
        for (int j=0; j<data[i].length; j++) {
            colEmpty[i] &= data[i][j].isEmpty();
        }
    }
      

  4.   

    哦,失误
    colEmpty[i] = (colEmpty[i] && data[i][j].isEmpty());
      

  5.   

    感谢1楼,果然是HashMap拖累了。。