2013-03-15 19 views
6

Używam pliku CSVReader OpenCSV do odczytywania oddzielonych przecinkami wartości z pliku. Nie wiem, jak przyciąć spacje wiodące i końcowe. Oczywiście, mógłbym zrobić String.trim(), ale nie byłoby to czystsze. W documentation nie ma określonej takiej opcji.Przycinanie spacji wiodących i końcowych w OpenCSV

+0

Jak to nie "czystsze", by użyć 'String.trim()'? – syb0rg

+0

Ponieważ muszę napisać jedną dodatkową linię. Musi również stworzyć cały nowy obiekt, więc nieco mniej wydajny. – user1377000

+3

Nie można oszczędzić ** 1 ** dodatkowej linii w kodzie źródłowym dla funkcji, którą umiesz używać? – syb0rg

Odpowiedz

1

Czy możesz przełączyć na SuperCSV? Ma opcję ignorowania otaczających przestrzeni na jego CsvPreference.Builder. To znacznie lepsza biblioteka, IMO. Jeśli ta preferencja nie spełnia Twoich oczekiwań, zawsze możesz rozszerzyć klasę Tokenizer i zastąpić readColumns. W przeciwnym razie wygląda na to, że OpenCSV nie jest bardzo ziarnisty i wymagałoby rozszerzenia CSVReader i przesłania readNext. To może działać:

class MyReader extends au.com.bytecode.opencsv.CSVReader { 
    @Override public String[] readNext() throws IOException { 
     String[] result = super.readNext(); 
     for (int i=0; i<result.length; i++) result[i] = result[i].trim(); 
     return result; 
    } 
} 
0

Korzystanie pomysł ngreen za wymyśliłem następujący roztworu roboczego:

public class CSVReaderExtended extends CSVReader { 

    private static final String EXP_ALPHA_AND_DIGITS = "[^a-zA-Z0-9]+"; 

    public CSVReaderExtended(Reader reader) { 
     super(reader); 
    } 

    @Override 
    public String[] readNext() throws IOException { 
     String[] result = super.readNext(); 
     if (result == null) 
      return null; 

     for (int index = 0; index < result.length; index++) { 
      result[index] = result[index].replaceAll(EXP_ALPHA_AND_DIGITS, ""); 
     } 
     return result; 
    } 
}