gpt4 book ai didi

java - 正则表达式匹配数字和运算符之间的空格,但数字之间没有空格

转载 作者:行者123 更新时间:2023-12-01 20:11:08 25 4
gpt4 key购买 nike

我在这个论坛上搜索了很多帖子,令我惊讶的是,我没有发现有人遇到像我这样的问题。我必须为控制台中的字符串值制作一个简单的计算器。现在,我正在尝试制作一些正则表达式来验证输入。我的计算器必须接受运算符之间有空格的数字(仅允许 + 和 - ),但不能接受数字之间有空格的数字,总而言之:2 + 2 = 4 是正确的,但是2 2 + 2 --> 这应该会出错并通知控制台上的用户他在数字之间放置了空格。

我想出了这个:

static String properExpression = "([0-9]+[+-]?)*[0-9]+$";
static String noInput = "";
static String numbersFollowedBySpace = "[0-9]+[\\s]+[0-9]";
static String numbersWithSpaces = "\\d+[+-]\\d+";

//I've tried also "[\\d\\s+\\d]";

void validateUserInput() {
Scanner sc = new Scanner(System.in);
System.out.println("Enter a calculation.");
input = sc.nextLine();

if(input.matches(properExpression)) {
calculator.calculate();

} else if(input.matches(noInput)) {
System.out.print(0);

} else if(input.matches(numbersFollowedBySpace)) {
input.replaceAll(" ", "");
calculator.calculate();

} else if(input.matches(numbersWithSpaces))
{
System.out.println("Check the numbers.
It seems that there is a space between the digits");
}

else System.out.println("sth else");

你能给我一些关于我应该使用的正则表达式的提示吗?

最佳答案

要匹配完整的表达式,如 2+3=246 - 4 = 2,正则表达式如

^\d+\s*[+-]\s*\d+\s*=\s*\d+$

就可以了。看example 1你可以在那里玩它。

如果您想匹配更长的表达式,例如2+3+4+5=14,那么您可以使用:

^\d+\s*([+-]\s*\d+\s*)+=\s*\d+$

说明:

^\d+                   # first operand
\s* # 0 or more spaces
( # start repeating group
[+-]\s* # the operator (+/-) followed by 0 or more spaces
\d+\s* # 2nd (3rd,4th) operand followed by 0 or more spaces
)+ # end repeating group. Repeat 1 or more times.
=\s*\d+$ # equal sign, followed by 0 or more spaces and result.

现在,您可能希望接受像 2=2 这样的表达式作为有效表达式。在这种情况下,重复组可能不存在,因此将 + 更改为 *:

^\d+\s*([+-]\s*\d+\s*)*=\s*\d+$

看看example 2对于那个。

关于java - 正则表达式匹配数字和运算符之间的空格,但数字之间没有空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46695215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com