问题描述
我有一个带有 ;
分隔符的 CSV 文件,但在其中一个字段中它表示带有 |
分隔符的对象:
field1;field2;field3;"field-4.1;field-4.2|field-4.1;field-4.2";field5;field6;
所以问题在于 field4
表示由管道分隔的多个对象。
其实我的模板是这样的:
<record name="fields" class="br.com.beanio.MyPojo">
<field name="field1"/>
<field name="field2"/>
<field name="field3"/>
<segment name="fields4" minOccurs="0" collection="list" class="br.com.beanio.MySubPojo">
<field name="field4-1" />
<field name="field4-2" />
</segment>
<field name="field5"/>
<field name="field6"/>
</record>
我尝试使用不同的属性来识别 field4 何时代表一个新对象,但没有奏效。
如何使用 beanIO 模板读取字段 4?
提前致谢
解决方法
我的解决方案是为该字段创建一个 typeHandler:
public class MyCustomTypeHandler implements TypeHandler {
在我的模板中,我使用了 typeHandler:
<field name="fieldWithList" typeHandler="MyCustomTypeHandler"/>
因此在 typeHandler 中的 parse 方法中,我可以处理该字段:
if (nonNull(text)) {
asList(text.split("\\|")).forEach(str -> {
String[] fields = str.split(";",-1);
// process and add items to the list
});
}