public static List<String> parseCSV(String line) {
final List<String> list = new ArrayList<String>();
int charCnt = 0;
int charIdx = 0;
final StringBuilder builder = new StringBuilder();
while (charCnt < line.length()) {
final boolean isDoubleQuote = line.substring(charCnt, charCnt + 1).equals("\"");
if (isDoubleQuote) {
++charCnt;
}
charIdx = line.indexOf(isDoubleQuote ? "\"" : ",", charCnt);
if (charIdx < 0) {
charIdx = line.length();
}
final String workStr = line.substring(charCnt, charIdx);
if (isDoubleQuote && charIdx < line.length() - 1
&& line.substring(charIdx + 1, charIdx + 2).equals("\"")) {
// 文字列内のクォートと判断
builder.append(workStr);
builder.append("\"");
charCnt = charIdx + 1;
} else {
list.add(builder.toString() + workStr);
builder.setLength(0);
charCnt = charIdx + (isDoubleQuote ? 2 : 1);
}
// 最後の文字が"SEPARATOR" modify:2008.04.16
if (line.length() == charCnt) {
final String lastStr = line.substring(charCnt - 1, charCnt);
if (lastStr.equals(",")) {
list.add("");
}
}
}
}