You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:19:06