Java中如何将后缀表达式末尾的'-'替换为'negate'?
解决后缀表达式末尾负号替换为
negate的问题 我明白你的困扰了——你把中缀表达式-(4-2)转换成后缀表达式后得到4 2 - -,想把最后那个代表一元负号的-替换成negate,但直接用String.replace()方法会把所有-都换掉,导致结果不符合预期。下面给你两种实用的解决方案:
方案1:分割字符串后替换最后元素
因为后缀表达式是用空格分隔的,我们可以先把字符串拆分成数组,定位到最后一个元素进行替换,再重新拼接成字符串:
// 假设你的后缀表达式结果存在postfix变量中 String postfix = "4 2 - -"; String[] tokens = postfix.split(" "); // 检查最后一个token是否是需要替换的'-' if (tokens.length > 0 && tokens[tokens.length - 1].equals("-")) { tokens[tokens.length - 1] = "negate"; } // 重新拼接成目标字符串 String modifiedPostfix = String.join(" ", tokens); System.out.println(modifiedPostfix); // 输出:4 2 - negate
这种方法逻辑直观,还能灵活处理其他类似的末尾 token 替换需求,适合需要明确判断的场景。
方案2:使用正则表达式精准替换末尾的-
如果你想更简洁地实现,可以用正则表达式匹配字符串末尾的-,然后替换成negate:
String postfix = "4 2 - -"; // 匹配末尾的'-'(允许后面有零个或多个空格) String modifiedPostfix = postfix.replaceAll("-\\s*$", "negate"); System.out.println(modifiedPostfix); // 输出:4 2 - negate
这里正则表达式-\\s*$的含义是:
-:匹配目标字符减号\\s*:匹配零个或多个空白字符(避免末尾有空格的情况)$:表示匹配字符串的末尾位置
这样就能精准替换最后那个代表一元负号的-,不会影响前面的二元减号。
为什么你之前用replace()失败?因为String.replace(CharSequence target, CharSequence replacement)会替换所有匹配的目标内容,直接用replace("-", "negate")会把两个-都换成negate,得到4 2 negate negate,这显然不是你想要的结果。
内容的提问来源于stack exchange,提问作者AaySquare
相关产品推荐
相关产品推荐

