Java 对管道分隔字符串使用正则表达式模式匹配
我试图在java中对管道分隔字符串进行模式匹配。但不确定出了什么问题。需要专家的帮助Java 对管道分隔字符串使用正则表达式模式匹配,java,regex,matcher,Java,Regex,Matcher,我试图在java中对管道分隔字符串进行模式匹配。但不确定出了什么问题。需要专家的帮助 A |账单访问密钥| CBEBALCOM| D | 215325775 | 20210507 | 9 | BALCOM系统有限公司||| I | 1 |双面打印页背面| 我有上面记录的文件,我想找到以“D”开头的记录,并获取下一个管道分隔值。并将其存储在某个POJO对象中 所以尝试通过应用模式首先读取值,但找不到匹配项 String pattern = "r'D((?:\"(.*?)\&q
A |账单访问密钥| CBEBALCOM|
D | 215325775 | 20210507 | 9 | BALCOM系统有限公司|||
I | 1 |双面打印页背面|
我有上面记录的文件,我想找到以“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 List=Files.line(Path.of(“Myfile.txt”))
.filter(str->str.startsWith(“D |”))
.map(str->str.substring(2).split(“\\\\”,3))
.map(arr->新字符串[]{arr[0],arr[1]})
.collect(Collectors.toList());
}捕获(ioe异常ioe){
ioe.printStackTrace();
}
您在这里期望的确切输出是什么?首先,从正则表达式中删除r'
和'
,因为它们不是正则表达式的一部分。它们是其他语言用来分隔正则表达式的字符。在Java中,正则表达式是字符串文本其次,由于您的数据没有双引号,请删除“
来自正则表达式。--第三,问题是关于|
分隔符的,但是正则表达式根本不检查|
。那怎么行呢?--简言之,你的正则表达式远远偏离了你所声称的你想要的。退后一步,重新思考你在做什么。请检查。在那里,您可以验证正则表达式模式。
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();
}