gpt4 book ai didi

java - 在 Java 字符串中查找数学运算符?

转载 作者:太空宇宙 更新时间:2023-11-04 11:22:53 24 4
gpt4 key购买 nike

我希望能够判断一个字符串是否是一个数学表达式。我的问题的本质是在任何给定字符串中查找与以下任何一个都不匹配的符号:*、/、+、-、(、)、0-9。

if (Pattern.compile("[a-z]").matcher(inputExpression).find()) {
return ErrorType.ALPHABETIC_SYMBOL;
} else if (!inputExpression.matches("[-+*/()]") || !inputExpression.matches("[0-9]")) {
return ErrorType.UNKNOWN_SYMBOL;
}

我做错了什么?如果我删除第二个 if 语句并期望在字符串中找到字母符号,则该程序可以正常工作。

我尝试执行以下操作:将 matches 方法更改为 .find() 以查找模式是否存在,如下所示。

if (Pattern.compile("[a-z]").matcher(inputEquation).find()) {
return ErrorType.ALPHABETIC_SYMBOL;
} else if (!Pattern.compile("[-*+/]").matcher(inputEquation).find() && !Pattern.compile("[0-9]").matcher(inputEquation).find()) {
return ErrorType.UNKNOWN_SYMBOL;
}

代码仍然无法工作。我有逻辑错误。

最佳答案

您的问题出在 inputExpression.matches 上。它不会搜索字符串,而是检查整个字符串是否匹配。你需要的是

if (Pattern.compile("[A-Za-z]").matcher(inputExpression).find()) {
return ErrorType.ALPHABETIC_SYMBOL;
} else if (Pattern.compile("[^-+*/()0-9]").matcher(inputExpression).find()) {
// [^...] negates a character class
return ErrorType.UNKNOWN_SYMBOL;
}

老实说,您甚至不需要正则表达式。下面的循环实现了相同的结果并且更容易查看。

String accepted = "-+*/()";
for (int i = 0; i < inputExpression.length(); i++) {
char c = inputExpression.charAt(i);
if (c >= '0' && c <= '9') continue;
if (c >= 'a' && c <= 'z') return ErrorType.ALPHABETIC_SYMBOL;
if (c >= 'A' && c <= 'Z') return ErrorType.ALPHABETIC_SYMBOL;
if (accepted.indexOf(c) < 0) return ErrorType.UNKNOWN_SYMBOL;
}

关于java - 在 Java 字符串中查找数学运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44717684/

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