【发布时间】:2017-10-11 18:30:27
【问题描述】:
我在这个论坛上搜索了很多帖子,令我惊讶的是,我没有找到像我这样的问题的人。 我必须从控制台为字符串值制作一个简单的计算器。现在,我正在尝试制作一些正则表达式来验证输入。 我的计算器必须接受运算符之间有空格的数字(只允许 + 和 - ),但不能接受数字之间有空格的数字,总结一下: 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");
你能给我一个关于我应该使用的正则表达式的提示吗?
【问题讨论】:
-
您没有找到答案的原因可能是因为正则表达式不是确定字符串是否是有效数学方程式的好工具!当您开始添加其他运算符(例如括号、指数等)时会发生什么?
-
...但是,如果我们将问题限制为您提到的简单类型的方程式,那么当然可以使用正则表达式来完成。
-
在下面使用正则表达式 \d*\s\+\s\d*\s
-
虽然我同意@TomLord,但在使用正则表达式时,我仍然会尝试帮助您解决问题。为什么不使用
\d+\s+\d+来检测数字之间有空格的方程? -
这只是我必须做的一些糟糕的作业,所有其他操作都应该被视为错误,所以这个计算器永远不会有更多的选择。放置括号或指数应该会出错,因为它不在其规范中。我想所有这些限制真的只会让事情变得更糟:)
标签: java regex string calculator