2013-03-15 32 views
6

OpenCSVのCSVReaderを使用して、カンマ区切りの値をファイルから読み込みます。先頭と末尾のスペースをどのようにトリミングするかはわかりません。確かに、私はString.trim()をすることができましたが、それはクリーナーではありません。 documentationにはそのようなオプションは指定されていません。OpenCSVの先頭と末尾のスペースを切り捨てる

+0

どのように 'String.trim()'を使用するために、 "クリーン" ではないでしょうか? – syb0rg

+0

私は余分な行を書く必要があるので。また、新しいオブジェクト全体を作成する必要がありますので、少し効率が悪くなります。 – user1377000

+3

使い方を知っている機能のソースコードに** 1 **余分な行を用意することはできませんか? – syb0rg

答えて

1

SuperCSVに切り替えることはできますか? CsvPreference.Builderの周囲のスペースを無視するオプションがあります。それははるかに優れたライブラリ、IMOです。その設定があなたが望んでいない場合、常にTokenizerクラスを拡張してreadColumnsを上書きすることができます。それ以外の場合、OpenCSVはあまり細かくはないので、CSVReaderを拡張し、readNextを上書きする必要があります。これはうまくいくかもしれない:

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

ngreenのアイデアを使用して、私は、次の作業ソリューションを思い付いた:

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; 
    } 
} 
関連する問題