【问题标题】:How to skip embedded "newlines" in a csv file using OpenCSV如何使用 OpenCSV 在 csv 文件中跳过嵌入的“换行符”
【发布时间】:2012-02-08 06:01:27
【问题描述】:

我有一个 csv 文件,其中包含 5 个字段,其中 1 个字段嵌入了换行符。我可以使用 CSVReader [OpenCSV] 完美地读取 csv 文件。尽管嵌入了换行符,我也能够获得单个字段。但我想编写另一个 csv 文件,它以相同的方式包含所有字段,但只想忽略“嵌入式换行符”,而不是传统的行尾换行符。有人可以告诉我如何实现这一目标吗?

我正在使用下面的代码,但不知何故我仍然无法将“\n”替换为“”。 System.out.println(tempLine[0]); 的输出仍然包含嵌入的换行符。

CSVReader reader = new CSVReader(new FileReader(INPUT_FILE), ',');  
CSVWriter writer = new CSVWriter(new FileWriter(OUTPUT_FILE), ',');  
String [] nextLine;  
String [] tempLine = new String[1];    
while ((nextLine = reader.readNext()) != null)  
{  
   System.out.println("Tweet: " + nextLine[3] + "\nSentiment: " +  nextLine[4]);  
   tempLine[0] = nextLine[3].replace("\\n", "");  
   System.out.println(tempLine[0]);  
   writer.writeNext(tempLine);    
}

感谢您的帮助!

【问题讨论】:

    标签: java csv opencsv


    【解决方案1】:

    读完一行后,检查每个字段并删除您找到的所有换行符。

    String[] newFields = new String[fields.length];
    i=0;
    for (String field : fields)
    {
        newFields[i++] = field.replace("\\n","");
    }
    

    然后使用 OpenCSV 将 newFields 写回。

    【讨论】:

    • replace() 方法不会更新输入参数,我在我的伪 java 示例中对此进行了掩饰。它返回一个包含结果的新字符串。我已经更新了我的答案。
    • 答案在于“换行符”的正确表示。在此代码中,换行符应仅表示为“\n”,因为“\n”会被编译器转换为真正的换行符。所以换行符被发送到正则表达式引擎,我们得到了正确的替换。另一方面,“\\n”在编译器完成后转换为“\n”,因此给我们错误的输出。这将解决问题: tempLine[0] = nextLine[3].replace("\\n", "");
    【解决方案2】:

    使用如下所示的 util 方法。稍微修改了@Jim Garrison 的回答。将“\\n”改为“\n”

        private static String[] cleanNewLine(String[] fields) {
            String[] newFields = new String[fields.length];
            int i = 0;
            for (String field : fields) {
                if(field != null)
                    newFields[i] = field.replace("\n", "");
                i++;
            }
            return newFields;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多