java - 如何根据java中的双引号分隔符将多个List<String>元素合并为一个

标签 java list csv data-structures

我在其他平台 (Salesforce) 中生成了一个 CSV 文件,默认情况下 Salesforce 似乎不会在某些大型文本字段中处理文件生成中的换行符,因此在我的 CSV 文件中,我有一些带有这样的断线的行需要修复:

"column1","column2","my column with text
here the text continues

more text in the same field
here we finish this","column3","column4"

使用这段代码的想法相同:

        List<String> listWords = new ArrayList<String>();
        listWords.add("\"Hi all");
        listWords.add("This is a test");
        listWords.add("of how to remove");
        listWords.add("");
        listWords.add("breaklines and merge all in one\"");
        listWords.add("\"This is a new Line with the whole text in one row\"");

在这种情况下我想合并元素。我的第一种方法是检查最后一个字符不是 (") 的行,连接下一行,就像这样,直到我们看到 las char 包含另一个双引号。

这是我想要实现的目标的一个非工作示例,但我希望它能给您一个想法

            String[] csvLines = csvContent.split("\n"); 

            Integer iterator = 0;
            String mergedRows = "";

            for(String row:csvLines){
                newCsvfile.add(row);
                if(row != null){
                    if(!row.isEmpty()){
                        String lastChar = String.valueOf(row.charAt(row.length()-1));                       
                        if(!lastChar.contains("\"")){                           
                            //row += row+" "+csvLines[iterator+1].replaceAll("\r", "").replaceAll("\n", "").replaceAll("","").replaceAll("\r\n?|\n", "");
                            mergedRows += row+" "+csvLines[iterator+1].replaceAll("\r", "").replaceAll("\n", "").replaceAll("","").replaceAll("\r\n?|\n", "");
                            row = mergedRows;
                            csvLines[iterator+1] = null;
                        }
                    }
                    newCsvfile.add(row);                    
                }   
                iterator++; 
            }

我的最终结果应如下所示(基于列表示例):

“大家好,这是一个关于如何删除断线并将所有内容合并为一个的测试”

“这是一个新行,整个文本在一行中”。

实现这一目标的最佳方法是什么?

最佳答案

如果您不想使用 @RealSkeptic 建议的 CSV 阅读库...

从您的 listWords 转到您期望的解决方案相当简单:

List<String> listSentences = new ArrayList<>(); 
String tmp = "";

for (String s : listWords) {
    tmp = tmp.concat(" " + s);
    if (s.endsWith("\"")){
        listSentences.add(tmp);
        tmp = "";
    }
}

关于java - 如何根据java中的双引号分隔符将多个List<String>元素合并为一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43763431/

相关文章:

java - 为什么 Double.parseDouble(null) 和 Integer.parseInt(null) 抛出不同的异常?

java - 如何将循环链表排入队列,同时确保最后一个元素指向第一个元素?

java Makefile 不起作用

MySQL CSV 导入 - 输入的日期为 0000-00-00 00 :00:00 if timestamp has milliseconds?

php 和 js//csv 到表(带有附加内容)到 csv

java - 迭代 POJO 属性

list - Scala 列表错误

python - 根据条件从字典列表中生成唯一的字典对

list - 强制重新计算列表

java - 从java中的对象生成CSV文件