Spring Batch DlimitedLineTokenizer类quteCharacter属性行为 [英] Spring Batch DelimitedLineTokenizer class quoteCharacter property behavior

查看:5
本文介绍了Spring Batch DlimitedLineTokenizer类quteCharacter属性行为的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个项目阅读器,如下所示:

<beans:bean id="myItemReader" class="org.springframework.batch.item.file.FlatFileItemReader">
<beans:property name="resource" ref="myFileResource" />
    <beans:property name="lineMapper">
        <beans:bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
            <beans:property name="lineTokenizer">
                <beans:bean class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
                    <beans:property name="delimiter" value="|"/>
                    <beans:property name="quoteCharacter" value="~"/>
                    <beans:property name="names" value="${my_column_names}" />
                </beans:bean>
            </beans:property>
            <beans:property name="fieldSetMapper">
            <beans:bean class="${my_mapper_class_name}" />
        </beans:property>
    </beans:bean>
</beans:property>

如上所示,我将引号字符从默认"(双引号)更改为~(斜号)

现在,引号字符上的DlimitedLineTokenizer上的Java文档显示:

QuteCharacter的公共设置器。引号字符可用于跨行结束扩展字段,或将包含分隔符的字符串括起来。在带引号的标记内,可使用引号字符进行转义,因此将"a""b""c"标记为"b"c。

因此,如果我的数据本身包含分隔符(在我的例子中是竖线符号),那么我应该用引号将它括起来--我就是这么做的。例如下面的行,其中第三列包含分隔符:

oneColumn|twoColumn|three~|~Column|fourColumn
但是,我的Java对象中第三列的值是"Three~|~Column",而不是应该的"Three|Column"。

在结果Java对象项的属性内设置值时,是否应该自动处理和忽略用于对数据中的分隔符进行转义的引号字符?

在编写器(PreparedStatementSetter或LineAggregator)中再次用空字符串替换引号字符是解决此问题的唯一方法吗?

感谢阅读!

推荐答案

如果字符串以引号字符开头/结尾,则使用引号。 在您的示例中:

oneColumn|twoColumn|~three|Column~|fourColumn

您将得到three|Column 如果字符串包含分隔符、空格、换行符或引号字符本身,则必须将其引起来;如果引号字符是值的一部分,则必须使用双引号字符(请参见here)

这篇关于Spring Batch DlimitedLineTokenizer类quteCharacter属性行为的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆