Java Spring Boot中替换公式特定值且不干扰其他项的方法
解决Java中替换公式里单独B/C但保留BC的问题
要实现仅替换公式中非BC组合内的B和C,需要利用正则表达式的负向断言精准匹配目标字符,避免误替换BC中的字符。
修正后的代码
String formula = "A+AB+A/B-BB+BC+C"; // 替换所有前面不是B的C为Y(排除BC中的C) String tempFormula = formula.replaceAll("(?<!B)C", "Y"); // 替换所有后面不是C的B为X(排除BC中的B) String newFormula = tempFormula.replaceAll("B(?!C)", "X");
替换后的结果
原公式经过替换后变为:A+AX+A/X-XX+BC+Y,完全符合需求——BC项完整保留,其他位置的B替换为X、单独的C替换为Y。
正则说明
(?<!B)C:负向后行断言,匹配C字符时,要求该字符的前一个字符不是B,以此跳过BC中的C。B(?!C):负向先行断言,匹配B字符时,要求该字符的后一个字符不是C,以此跳过BC中的B。
原代码问题分析
你之前的代码直接全局替换所有B和C,没有考虑上下文关系,导致BC中的B被替换为X、C被替换为Y,最终得到错误结果A+AX+A/X-XX+XY+Y。
内容的提问来源于stack exchange,提问作者lpdevlop
相关产品推荐
相关产品推荐

