问题描述
我正在尝试对 java 中的管道分隔字符串进行模式匹配。但不确定出了什么问题。需要专家的帮助。
A|Bill Access Key|CBEBALCOM|
D|215325775|20210507|9|BALCOM SYstemS LTD|||
I|1|Back of Duplex Page|
我有上述记录的文件,我想找到以“D”开头的记录并获取下一个管道分隔值。并将它们存储在某个 POJO 对象中。
所以尝试首先通过应用模式读取值但无法找到匹配项。
String pattern = "r'D((?:\"(.*?)\"))'";
Pattern r = Pattern.compile(pattern); Matcher m = r.matcher(line);
if (m.find( )) {
System.out.println("value1" + m.group(0) );
System.out.println("value2" + m.group(1) );
} else {
System.out.println("No Match");
}
解决方法
您可以这样尝试,而不是使用纯正则表达式解决方案
- 流式传输文件的行
- 过滤以
D|
开头的行 - 从索引 2 开始拆分过滤后的行
- 创建仅包含前两个值的新数组
- 并收集到
List<String[]>
List<String[]> list = Files.lines(Path.of("Myfile.txt"))
.filter(str->str.startsWith("D|"))
.map(str->str.substring(2).split("\\|",3))
.map(arr->new String[]{arr[0],arr[1]})
.collect(Collectors.toList());
} catch (IOException ioe) {
ioe.printStackTrace();
}