0
我有一个输入文件包含制表符分隔的字符串。在某些行上可能会有多个连续的选项卡。使用Regex制表符分隔的字符串与RegexLineTokenizer
我试过使用Spring的DelimitedLineTokenizer,但由于有多个选项卡,我不得不考虑切换到RegexLineTokenizer。
在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;
}
该文件包含以下行(样本)
abc def ghi
00089BTT IOIX BRA
00089BZA BzDSA BRA
现在,我试图用另一段代码,和它的作品。
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+
,但那也没有效果。
你可以用你正在使用的代码和你正在尝试的例子来更新问题吗? –
不清楚你在做什么。如果您提供[最小,完整和可验证的示例](http://stackoverflow.com/help/mcve),这将有所帮助。 – freedev