code: public static List<String> splitToCells(String line, int minCnt) {
  
          LOG.trace("split line : {}", line);
  
          List<String> newCells = new ArrayList<String>();
  
          for (Iterator<String> cellItr = Arrays.asList(line.split(",")).iterator(); cellItr
                  .hasNext();) {
  
              String cell = cellItr.next();
              StringBuilder builder = new StringBuilder(cell);
  
              // セル内のダブルクオーテーションが奇数個の場合はセル内分割があるとみなし、
              // 次のダブルクオーテーションが奇数個のセルまで連結して1セルとする。
              if (StringUtils.countMatches(cell, '"') % 2 != 0) {
  
                  do {
                      cell = cellItr.next();
                      // splitで除外された「,」をappend
                      builder.append(",");
                      builder.append(cell);
  
                  } while (StringUtils.countMatches(cell, '"') % 2 == 0 && cellItr.hasNext());
  
              }
  
              newCells.add(modifyStr(builder.toString()));
  
          }
  
          while (newCells.size() < minCnt) {
              newCells.add("");
          }
  
          LOG.trace("new cells : {}", newCells);
  
          return newCells;
      }
docs: 文字列を「,」(半角カンマ)または「\t」(タブ)で分割しListに格納して返します。分割後の1要素の文字列が「
  "」(半角ダブルクオーテーション)で開始かつ終了していた場合は、 前後の「"」を除きます。
  分割後の要素数が下限値に満たない場合でも、空文字をList末尾に追加して下限値となるようにします。
  
  @param line
  分割対象の文字列
  @param minCnt
  分割後の要素数の下限値
  @return 「,」(半角カンマ)または「\t」(タブ)で分割した文字を格納するList