Java正则解析器替换分隔符未生效问题求助
问题分析:修改正则替换分隔符后split结果无变化
嘿,我一眼就发现问题所在了——你修改了正则替换的分隔符,但拆分结果的代码根本没跟着改!而且还有个容易忽略的小坑也得提一下。
核心错误:拆分逻辑与替换逻辑不匹配
你把substitution里的逗号换成了|或*,但在拆分result的时候,依然用的是result.split("lorem")——这相当于你把字符串换成了用新符号分隔的格式,但拆分的时候还是在找"lorem"这个完全不相关的字符串,结果自然不会有变化。
必须注意:正则特殊字符的转义
另外,|和*都是正则表达式里的元字符(|表示分支匹配,*表示零次或多次匹配),直接用它们作为split()的参数会被当作正则语法解析,而不是普通的分隔符。所以你需要对它们进行转义:
- 如果用
|作为分隔符,拆分时要写split("\\|") - 如果用
*作为分隔符,拆分时要写split("\\*")
额外修复:避免跳过行的小bug
你原来的代码还有个隐藏问题:while (br.readLine() != null)之后又调用了String nextLine = br.readLine();,这会导致每次循环读取两行,跳过其中一行。正确的写法应该是把读取操作放在循环条件里,确保每一行都被处理。
修正后的代码示例(以|为分隔符)
try (CSVWriter csvWriter = new CSVWriter(new FileWriter(myLocalPath + "CSV/" + choice.toLowerCase() + ".csv"))) { Pattern r = Pattern.compile(pattern); String nextLine; // 把readLine()放在循环条件里,避免跳过行 while ((nextLine = br.readLine()) != null) { Matcher matcher = r.matcher(nextLine); // 替换为|分隔的格式 String result = matcher.replaceAll("$1|$4|$7|$8|$10"); // 用转义后的|拆分字符串 String[] line = result.split("\\|"); csvWriter.writeNext(line, false); } } catch(Exception e){ System.out.println(e); System.out.println("Parsing done!"); }
验证步骤
- 先打印
result的值,确认替换后的字符串确实是用你设置的分隔符(|或*)分隔的 - 确认
split()的参数和你用的分隔符一致,并且正确转义了特殊字符 - 运行代码,检查CSV文件的输出是否符合预期
内容的提问来源于stack exchange,提问作者Marco Geertsma
相关产品推荐
相关产品推荐

