Взгляните на PatternMatchingCompositeLineTokenizer
. Здесь вы можете использовать Pattern
, чтобы определить, какие записи анализируются с помощью LineTokenizer
. В вашем случае у вас будет один Pattern
, который идентифицирует записи с разделителями-запятыми и сопоставляет их с токенизатором, который анализирует через запятые. У вас также будет Pattern
, который идентифицирует записи, разделенные вертикальными чертами, и сопоставляет их с соответствующими LineTokenizer
. Это будет выглядеть примерно так:
@Bean
public LineTokenizer compositeLineTokenizer() throws Exception {
DelimitedLineTokenizer commaTokenizer = new DelimitedLineTokenizer();
commaTokenizer.setNames("a", "b", "c");
commaTokenizer.setDelimiter(",");
commaTokenizer.afterPropertiesSet();
DelimitedLineTokenizer pipeTokenizer = new DelimitedLineTokenizer();
pipeTokenizer.setNames("a", "b", "c");
pipeTokenizer.setDelimiter("|");
pipeTokenizer.afterPropertiesSet();
// I have not tested the patterns here so they may need to be adjusted
Map<String, LineTokenizer> tokenizers = new HashMap<>(2);
tokenizers.put("*,*", commaTokenizer);
tokenizers.put("*|*", pipeTokenizer);
PatternMatchingCompositeLineTokenizer lineTokenizer = new PatternMatchingCompositeLineTokenizer();
lineTokenizer.setTokenizers(tokenizers);
return lineTokenizer;
}