Как пропустить встроенные символы новой строки в файле csv с помощью OpenCSV

У меня есть файл csv, который содержит 5 полей, в одном из которых есть встроенные символы новой строки. Я могу отлично прочитать CSV-файл, используя CSVReader [OpenCSV]. Я также могу получить отдельные поля, несмотря на встроенные символы новой строки. Но я хочу написать еще один файл 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);    
}

Спасибо за помощь!


person mihirk    schedule 08.02.2012    source источник


Ответы (2)


После прочтения строки проверьте каждое поле и удалите все найденные символы новой строки.

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

Затем запишите новые поля обратно, используя OpenCSV.

person Jim Garrison    schedule 08.02.2012
comment
Метод replace() не обновляет входной параметр, который я как бы упустил из виду в своем псевдо-java-примере. Он возвращает НОВУЮ строку, содержащую результат. Я обновил свой ответ. - person Jim Garrison; 08.02.2012
comment
Ответ заключается в правильном представлении новой строки. Здесь в этом коде новая строка должна быть представлена ​​просто как \n, потому что \n транслируется компилятором в реальную новую строку. Таким образом, новый символ строки отправляется в механизм регулярных выражений, и мы получаем правильную замену. С другой стороны, \\n преобразуется в \n после завершения работы компилятора и, следовательно, дает нам неправильный результат. Это решит проблему: tempLine[0] = nextLine[3].replace(\\n, ); - person mihirk; 08.02.2012

Используйте метод 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;
    }
person Sakthivel    schedule 19.01.2015