在 OpenCSV 中修剪前导空格和尾随空格
我正在使用OpenCSV从文件中读取一些逗号分隔的值。我不确定如何修剪前导空格和尾随空格。当然,我可以做到,但如果不是这样会更干净。在文档中没有指定此类选项。CSVReader
String.trim()
我正在使用OpenCSV从文件中读取一些逗号分隔的值。我不确定如何修剪前导空格和尾随空格。当然,我可以做到,但如果不是这样会更干净。在文档中没有指定此类选项。CSVReader
String.trim()
你能切换到SuperCSV吗
?它有一个选项来忽略其CsvPreference.Builder
上的周围空间。这是一个更高级的图书馆,IMO。如果该首选项不能执行所需的操作,则始终可以扩展 Tokenizer 类并重写 readColumns
。否则,它看起来不是很精细,需要您扩展和覆盖readNext
。这可能有效:OpenCSV
CSVReader
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;
}
}
如果您正在使用Bean映射和OpenCSV,我个人更喜欢扩展MapingStrategy,因为它处理对其相关字段的最终值分配。假设您的字段是制表符分隔的。然后,您可能很难扩展 CSVReader。此外,需要较少的编码。
在下面的示例中,我使用的是 ColumnPositionMappingStrategy,但您的策略可以是任何其他 MappingStrategy,因为 populateNewBean 位于父抽象类中。
private <T> MappingStrategy<T> createMappingStrategy() {
return new ColumnPositionMappingStrategy<T>() {
@Override
public T populateNewBean(String[] line) throws CsvDataTypeMismatchException, CsvConstraintViolationException,
CsvRequiredFieldEmptyException, CsvValidationException {
Arrays.setAll(line, (i) -> line[i].trim());
return super.populateNewBean(line);
}
};
}
如您所见,在填充 Bean 之前,每个字段/行都会被修剪。