タブ区切り文字列を含む入力ファイルがあります。いくつかの行には複数の連続したタブがあるかもしれません。RegexLineTokenizerでタブ区切り文字列にregexを使用する
私は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