【问题标题】:Is it possible to switch between + and - using regex in Java?是否可以在 Java 中使用正则表达式在 + 和 - 之间切换?
【发布时间】:2012-11-20 18:17:17
【问题描述】:
6*x + 7 = 7*x + 2 - 3*x

当我们将等式的右侧移动到左侧时,我们需要将运算符符号从 + 翻转到 - ,反之亦然。

使用 java regex replaceAll,我们可以将所有 + 替换为 -。结果,所有的操作符都变成了 -'s,使得我们无法恢复所有的 +'s。

作为一种解决方法,我遍历字符串并在遇到一个时将 + 更改为 - ,反之亦然。但我仍然想知道是否有办法在 Java 中使用正则表达式在布尔值对之间翻转?

【问题讨论】:

  • 你真的不应该使用正则表达式来处理数学公式。使用标记器并使用标记。
  • 从字符串生成语法树,对树进行操作,然后渲染回字符串。更少的麻烦和更少的错误。

标签: java regex replace


【解决方案1】:

在 PHP 中可以执行以下操作:

function swap($m) {
    return ($m[0]=='-')?'+':'-';
}
echo preg_replace_callback( '(\+|\-)', 'swap', '1 + 2 - 3 + 4 - 5');

【讨论】:

【解决方案2】:

你可以使用这个技巧:

String equation = "<Your equation>"
equation = equation.replaceAll("+","$$$");
equation = equation.replaceAll("-","+");
equation = equation.replaceAll("$$$","-");

假设 $$$ 不在你的等式中。

【讨论】:

  • 使用 3 个 replaceAll 效率不高。此外,您忘记将replaceAll的结果分配给equation
  • 嘿,我给他看了一招。我没有说它高效,它只是比迭代更优雅
  • 此外,如果他的方程不是超级大,这个解决方案将运行得足够快,可以考虑用一些更快速但更复杂的算法来权衡它
  • 我确实考虑过使用临时变量的想法。您可能知道在 Ruby 等语言中进行值交换时不需要临时变量。
猜你喜欢
  • 2021-03-09
  • 2018-01-16
  • 1970-01-01
  • 1970-01-01
  • 2020-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多