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