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