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;
                                    }
                                }    

发布了11 篇原创文章 · 获赞 6 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/LYW_lyw/article/details/82383191