我在其他平台 (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/