我在用Java做计算器。问题是,我试图找到一个匹配,给定一个字符串,只接受第二个操作数(操作可以是+、-、*和/)。
示例字符串输入:
21 + 574
573 * 1
89 - 4312
23 / 23
-1 + 4
-3 + 45相应的字符串输出:
574
1
4312
23
4
45有人知道有匹配的吗?
发布于 2022-05-20 01:04:46
由于我已经在您的帖子的注释部分提供了以下内容,下面将拆分您想要的值:
System.out.println("21 + 574".split("\\s*(\\+|\\-|\\*|\\/)\\s*")[1]);这仅适用于无符号(正数),因为减号(-)也用于负数的符号(例如-574)。如果还需要处理负值,则需要对正则表达式进行轻微更改。我们需要在'-‘字符后面添加一个空格,例如:
"\\s*(\\+|\\- |\\*|\\/)\\s*"
^
Space这就意味着,任何包含减法的等式都必须包含减号运算符后面的空格。如果方程如下:4 + -6,这是很好的。即使在数字和运算符之间没有空白,例如:4+-6,这仍然会很好。但是,如果前面的方程中的运算符是减号运算符,而不是加号运算符,例如:4--6,则情况会完全改变。这个方程实际上会生成一个ArrayIndexOutOfBoundsException.这显然没什么好处。
为了避免这种特殊情况,我们需要分离两个减号(--),为此我们可以使用String#replace()方法,例如:
System.out.println("4--6".replace("--", "- -").split("\\s*(\\+|\\- |\\*|\\/)\\s*")[1]);这将输出:-6。
总有一天(我肯定)会有一段时间,即使这条或其他任何一条捷径都不够好,你需要真正解析这个方程。括号和括号在数学方程式中起着很大的作用,你需要一些东西来解析所有这些。正则表达式对于这类事情可能还不够好。
下面我提供了一种快速的方法,可以将方程分解为可能包含或不包含括号、括号、负数等的单个组件。也许这可以作为创建您自己的方程式分析器的起点(或者找到和使用已经开发的公式)。
/**
* This method will split a math equation string (even with various bracket
* types or nested brackets) into a String[] Array. Signed and unsigned
* integer or floating point values can be within the supplied mathematical
* equation.<br><br>
*
* Whitespaces are ignored during parsing and will not be contained within
* the returned String[] Array as an array element.<br>
*
* @param equation (String) The mathematical equation to parse into a
* String [] Array.<br>
*
* @return (Single Dimensional String[] Array)
*/
private String[] splitEquation(String equation) {
List<String> list = new ArrayList<>();
String number = "";
for (char c : equation.toCharArray()) {
if (c == ' ') {
if (!number.isEmpty()) {
list.add(number);
number = "";
}
}
else if (Character.isDigit(c) || c == '.' || (c == '-' && number.isEmpty())) {
number += Character.toString(c);
}
else if (!Character.isDigit(c) && !number.isEmpty()) {
list.add(number);
number = "";
list.add(Character.toString(c));
}
else {
list.add(Character.toString(c));
}
}
if (!number.isEmpty()) {
list.add(number);
}
return list.toArray(new String[list.size()]);
}使用此方法:
String[] parts = splitEquation("(4+(-3/2))");
System.out.println(Arrays.toString(parts));控制台窗口将显示:
[(, 4, +, (, -3, /, 2, ), )]https://stackoverflow.com/questions/72308346
复制相似问题