2013-03-15 135 views
6

我正在使用OpenCSV的CSVReader從文件中讀取一些逗號分隔值。我不知道如何修剪前後空格。當然,我可以做String.trim(),但它不會更清潔。在documentation中沒有指定這樣的選項。修剪OpenCSV中的前導空格和尾部空格

+0

它是如何不 「乾淨」 使用'String.trim()'? – syb0rg 2013-03-15 18:01:41

+0

因爲我必須寫一條額外的線。此外,它必須創建一個全新的對象,所以效率稍差。 – user1377000 2013-03-15 18:03:14

+3

你不能在源代碼中爲你知道如何使用的函數提供** 1 **額外的行嗎? – syb0rg 2013-03-15 18:05:42

回答

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; 
    } 
}