【问题标题】:Separate numbers in math expression [duplicate]数学表达式中的单独数字[重复]
【发布时间】:2015-02-27 11:43:50
【问题描述】:

我有一个存储为字符串的数学表达式:

String math = "12+3=15";

我想把字符串分成如下:

  • int num1(第一个数字,12)
  • int num2(第二个数字,3)
  • 字符串运算符 (+)
  • int 答案(答案,15)

(num1和num2可以是0-20之间的数字,运算符可以是+,-,*,/)

实现这一目标的最简单方法是什么?我正在考虑正则表达式,但我不知道该怎么做。

【问题讨论】:

  • 这是您唯一的格式吗?或者你的表达式可以更复杂,比如12+3+(2-3)=14?
  • 你的表达式总是由两个操作数和一个结果组成吗?
  • 是的,这是我唯一的格式。表达式可以是:2+3=5 6/2=3 12*3=36 22-20=2 等等

标签: java regex


【解决方案1】:

现在,不要对我皱眉头。你问的是最简单的解决方案:P

public static void main(String[] args) {
    String math = "12+3=15";
    Pattern p = Pattern.compile("(\\d+)(.)(\\d+)=(\\d+)");
    Matcher m = p.matcher(math);
    while (m.find()) {
        System.out.println(m.group(1));
        System.out.println(m.group(2));
        System.out.println(m.group(3));
        System.out.println(m.group(4));
    }
}

O/P:

12
+
3
15

EDIT : (\\d+)(.)(\\d+)=(\\d+) --> 
 \\d+ matches one or more digits.
 . matches anything
 () --> captures whatever is inside it
(\\d+)(.)(\\d+)=(\\d+) --> captures one or more digits followed by anything (+-* etc) then again one or more digits and ignores the "=" and then captures digits again.

捕获的组从 1 到 n 命名。组 0 代表整个字符串。

【讨论】:

  • 似乎是一个不错的解决方案。我会试试看。你能解释一下 Pattern p = Pattern.compile("(\\d+)(.)(\\d+)=(\\d+)");我想了解我在做什么以及为什么。谢谢
  • @vks 是的,这似乎是一种更简单的方法。但是运算符可以是 +,-,*,/
  • @user2939293 - 编辑我的答案并解释它:P
  • 太糟糕了,您的回答也接受无效字符串,例如"123=15"
  • @Tom - OP 说 - 是的,这是我唯一的格式 :P .. 我可以将其更改为 [+\\-*/] .. 但它不会有很大的不同。 :)
【解决方案2】:
\\b(\\d+)\\b|([+*\/-])

您可以简单地执行此操作并获取捕获。参见演示。

https://regex101.com/r/wU7sQ0/30

或者简单地用\\b分割。查看演示。

https://regex101.com/r/wU7sQ0/31

var re = /\b(\d+)\b|([+=\\-])/gm;
var str = '12+3=15';
var m;

while ((m = re.exec(str)) != null) {
if (m.index === re.lastIndex) {
re.lastIndex++;
}
// View your result using the m-variable.
// eg m[0] etc.
}

【讨论】:

  • 谢谢,我会阅读链接并尝试您的解决方案。运算符可以是 +,-,*,/
  • @vks - 转义- :P
  • 我不确定如何在内容中使用这个正则表达式。如何将 num1 存储到变量 int num1 等等?感谢您的帮助
  • @user2939293 added.edited
  • @vks - 是的.. 对.. 没有正确阅读:P
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-28
  • 1970-01-01
相关资源
最近更新 更多