Java 将正则表达式用于带正则表达式标记器的制表符分隔字符串

Java 将正则表达式用于带正则表达式标记器的制表符分隔字符串,java,spring,spring-batch,Java,Spring,Spring Batch,我有一个包含制表符分隔字符串的输入文件。在某些行上可能有多个连续的选项卡 我尝试使用Spring的分隔符LeNETOnEngisher,但是由于有多个选项卡,所以我不得不考虑切换到ReExxLeToNeNex. 在RegexLineTokenizer中,当我执行setRegex(“\t+”)时,它无法正确标记行,并且无法使用ArrayIndexOutOfBoundsException 我不确定我在这里做错了什么 代码如下: @Bean public FlatFileItemReader<R

我有一个包含制表符分隔字符串的输入文件。在某些行上可能有多个连续的选项卡

我尝试使用Spring的分隔符LeNETOnEngisher,但是由于有多个选项卡,所以我不得不考虑切换到ReExxLeToNeNex.

在RegexLineTokenizer中,当我执行setRegex(“\t+”)时,它无法正确标记行,并且无法使用ArrayIndexOutOfBoundsException

我不确定我在这里做错了什么

代码如下:

@Bean
public FlatFileItemReader<RoutingHubInfoId> routingHubIdReader() {
    System.out.println("Reading from file");
    FlatFileItemReader<RoutingHubInfoId> reader = new FlatFileItemReader<RoutingHubInfoId>();
    reader.setResource(new ClassPathResource("NAM_C4_DATA.txt"));
    DefaultLineMapper<RoutingHubInfoId> lineMapper = new DefaultLineMapper<RoutingHubInfoId>();
    RegexLineTokenizer rlt = new RegexLineTokenizer();
    rlt.setRegex("\t+");
    lineMapper.setLineTokenizer(rlt);
    lineMapper.setFieldSetMapper(new RoutingHubInfoIdMapper());
    reader.setLineMapper(lineMapper);

    return reader;
}
现在,我尝试了另一段代码,它成功了

public class RoutingHubIdReader 
{
    public static void main(String[] args) throws IOException, URISyntaxException
    {
        File file = new File(ClassLoader.getSystemResource("NAM_C4_DATA.txt").getFile());
        if (file.exists()) {
            System.out.println("File exists!");
        }
        else {
            System.out.println("File doesnt exist!");
        }
        LineNumberReader lnr = new LineNumberReader(new FileReader(file));
        String line;
        while ((line = lnr.readLine()) != null) {
            String[] tokens = line.split("\t+");
            if (tokens.length != 3) {
                System.out.println(("Tokens: size: " + tokens.length + " values: " + Arrays.asList(tokens)));
            }
        }

    }
}
我似乎遗漏了一些简单的东西,但不确定。我还尝试将
\t+
转义到
\\t+
,但也没有成功

使用正则表达式筛选数据的行标记器(使用 匹配组和非匹配组)


您的正则表达式没有定义任何匹配/非匹配组,因此无法正常工作。
我无法直接尝试,但
rlt.setRegex(([^\t]+)”)应该可以正常工作。

您能用正在使用的代码和正在尝试的示例更新问题吗?不清楚您在做什么。如果你能提供一份工作,那会有帮助的。
public class RoutingHubIdReader 
{
    public static void main(String[] args) throws IOException, URISyntaxException
    {
        File file = new File(ClassLoader.getSystemResource("NAM_C4_DATA.txt").getFile());
        if (file.exists()) {
            System.out.println("File exists!");
        }
        else {
            System.out.println("File doesnt exist!");
        }
        LineNumberReader lnr = new LineNumberReader(new FileReader(file));
        String line;
        while ((line = lnr.readLine()) != null) {
            String[] tokens = line.split("\t+");
            if (tokens.length != 3) {
                System.out.println(("Tokens: size: " + tokens.length + " values: " + Arrays.asList(tokens)));
            }
        }

    }
}