11/*
2- * Copyright 2013, 2014 Deutsche Nationalbibliothek
2+ * Copyright 2013-2024 Deutsche Nationalbibliothek and hbz
33 *
44 * Licensed under the Apache License, Version 2.0 the "License";
55 * you may not use this file except in compliance with the License.
2424import org .metafacture .framework .helpers .DefaultObjectPipe ;
2525
2626import com .opencsv .CSVReader ;
27+ import com .opencsv .CSVReaderBuilder ;
28+ import com .opencsv .RFC4180Parser ;
29+ import com .opencsv .RFC4180ParserBuilder ;
30+ import com .opencsv .exceptions .CsvException ;
2731
2832import java .io .IOException ;
2933import java .io .StringReader ;
@@ -48,6 +52,7 @@ public final class CsvDecoder extends DefaultObjectPipe<String, StreamReceiver>
4852 private String [] header = new String [0 ];
4953 private int count ;
5054 private boolean hasHeader ;
55+ private RFC4180Parser parser ;
5156
5257 /**
5358 * Creates an instance of {@link CsvDecoder} with a given separator.
@@ -56,6 +61,7 @@ public final class CsvDecoder extends DefaultObjectPipe<String, StreamReceiver>
5661 */
5762 public CsvDecoder (final String separator ) {
5863 this .separator = separator .charAt (0 );
64+ initializeCsvParser ();
5965 }
6066
6167 /**
@@ -65,13 +71,21 @@ public CsvDecoder(final String separator) {
6571 */
6672 public CsvDecoder (final char separator ) {
6773 this .separator = separator ;
74+ initializeCsvParser ();
6875 }
6976
7077 /**
7178 * Creates an instance of {@link CsvDecoder}. The default separator is
7279 * {@value #DEFAULT_SEP}.
7380 */
7481 public CsvDecoder () {
82+ initializeCsvParser ();
83+ }
84+
85+ private void initializeCsvParser () {
86+ this .parser = new RFC4180ParserBuilder ()
87+ .withSeparator (separator )
88+ .build ();
7589 }
7690
7791 @ Override
@@ -105,18 +119,19 @@ else if (parts.length == header.length) {
105119 }
106120 }
107121
108- private String [] parseCsv (final String string ) {
122+ private String [] parseCsv (final String csv ) {
109123 String [] parts = new String [0 ];
110124 try {
111- final CSVReader reader = new CSVReader (new StringReader (string ),
112- separator );
125+ final CSVReader reader = new CSVReaderBuilder (new StringReader (csv ))
126+ .withCSVParser (parser )
127+ .build ();
113128 final List <String []> lines = reader .readAll ();
114129 if (lines .size () > 0 ) {
115130 parts = lines .get (0 );
116131 }
117132 reader .close ();
118133 }
119- catch (final IOException e ) {
134+ catch (final IOException | CsvException e ) {
120135 e .printStackTrace ();
121136 }
122137 return parts ;
@@ -139,5 +154,6 @@ public void setHasHeader(final boolean hasHeader) {
139154 */
140155 public void setSeparator (final String separator ) {
141156 this .separator = separator .charAt (0 );
157+ initializeCsvParser ();
142158 }
143159}
0 commit comments