csv檔案匯入時"換行符"問題的解決思路
前提是資料是以"\t"分割,每個資料以"\""包裹,換行符為"\r\n"
1.準備String dataApp = AppConstants.EMPTY;用來拼接字串
2.如果讀取的資料中存在換行符,而此換行符是夾在某一條資料裡的,則需要讀取多次進行拼接處理
String appendFlagCheck = AppConstants.EMPTY;
dataApp = dataApp.replace("-", "");
//若“概要”,“商品名字”,“商品管理專案”中存在換行符則需要讀取多次進行拼接處理
if (!dataQ.isEmpty()) {
String dataStr[] = dataQ.split("\"",-1);
int countDataApp = dataApp.split("\t").length;
if (countDataApp != checkCount) {
//eg形式:商品名" [商品名,]
if (dataQ.contains("\"") && dataStr.length == 2 && StringUtils.isNotEmpty(dataStr[0]) && !StringUtils.isNotEmpty(dataStr[1])) {
dataApp += dataQ + "\t";
}
//eg形式:"商品名 [,商品名]
else if (dataQ.contains("\"") && dataStr.length == 2 && StringUtils.isNotEmpty(dataStr[1]) && !StringUtils.isNotEmpty(dataStr[0])) {
dataApp += dataQ + "\r\n";
}
//eg形式:正常的資料 "商品名"
else if (dataQ.contains("\"") && dataStr.length == 3) {
//eg形式:這一行的最後一個數據是正常資料。
int countDataApp2 = countDataApp + 1;
if (countDataApp2 == checkCount) {
dataApp += dataQ;
dataApp = dataApp.replace("-", "");
appendFlagCheck = Constants.SUCCESS;
}
else {
dataApp += dataQ + "\t";
}
}
//eg形式:不帶雙引號(概要或名字裡面的內容)
else if (!dataQ.contains("\"")){
dataApp += dataQ + "\r\n";
}
//eg形式:開頭第一個資料是一個單獨的雙引號--> " "正常資料"....
else {
dataApp += "\"" + "\t";
}
}
else{
//商品管理メモ中テキストの設定為這一行資料的最後一項時
//eg形式:這一行的最後一個數據:"FE(E後面存在換行)
if (dataQ.contains("\"") && dataStr.length == 2 && StringUtils.isNotEmpty(dataStr[1]) && !StringUtils.isNotEmpty(dataStr[0])) {
dataApp += dataQ + "\r\n";
}
//eg形式:這一行的最後一個數據:(E前面存在換行)EG"(徹底結束)
else if (dataQ.contains("\"") && dataStr.length == 2 && StringUtils.isNotEmpty(dataStr[0]) && !StringUtils.isNotEmpty(dataStr[1])){
dataApp += dataQ;
dataApp = dataApp.replace("-", "");
appendFlagCheck = Constants.SUCCESS;
}
//eg形式:這一行的最後一個數據:不帶雙引號(E前面存在換行)E(E後面也存在換行)
else if (!dataQ.contains("\"")){
dataApp += dataQ + "\r\n";
}
//eg形式:這一行的最後一個數據:最後一個引號前面有換行符FEG(換行符)"(徹底結束)
else {
dataApp += "\"";
dataApp = dataApp.replace("-", "");
appendFlagCheck = Constants.SUCCESS;
}
}
}
//eg形式:沒有任何內容只有一個換行符
else {
dataApp += "\r\n";
}
if (appendFlagCheck == Constants.SUCCESS) {
return dataApp;
}
else {
return "-" + dataApp;//用逗號作為一個標識表示拼接未結束
}
String dataAppStr[] = dataApp.split("\t",-1);
3.如果表頭列數與資料列數一致,則組成鍵值對形式用於儲存資料
if (dataAppStr.length == checkCount) {
for (int p = 0; p < dataAppStr.length; p++) {
if (!dataAppStr[p].isEmpty()) {
dataAppStr[p] = dataAppStr[p].replace("\"", "");
}
paramData1.put(lineOneCellFirstStrList.get(p), dataAppStr[p]);
}
appendFlag = true;
}
}