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

在Java字符串中查找数学运算符?,java,regex,string,pattern-matching,Java,Regex,String,Pattern Matching,我想知道字符串是否是数学表达式。 我的问题的真正本质是在任何给定字符串中查找与以下任何符号不匹配的符号:*、/、+、-、(、)0-9 if (Pattern.compile("[a-z]").matcher(inputExpression).find()) { return ErrorType.ALPHABETIC_SYMBOL; } else if (!inputExpression.matches("[-+*/()]") || !inputExpression.mat

我想知道字符串是否是数学表达式。 我的问题的真正本质是在任何给定字符串中查找与以下任何符号不匹配的符号:*、/、+、-、(、)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;
    }

代码仍然不起作用。我有逻辑错误。

您可以使用以下代码(只要替换方法输出类型和返回值即可):

详细信息

  • \\p{L}
    匹配任何字母(要仅匹配ASCII,请在此处使用
    \\p{Alpha}
  • else if(!Pattern.compile([-+*/()0-9]).matcher(inputExpression).find())
    检查字符串是否包含数字或字符类中定义的某些符号,找到后返回false

您可以使用以下代码(只需根据需要替换方法输出类型和返回值):

详细信息

  • \\p{L}
    匹配任何字母(要仅匹配ASCII,请在此处使用
    \\p{Alpha}
  • else if(!Pattern.compile([-+*/()0-9]).matcher(inputExpression).find())
    检查字符串是否包含数字或字符类中定义的某些符号,找到后返回false

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

if(Pattern.compile([A-Za-z]).matcher(inputExpression.find()){
返回ErrorType.Alphabic_符号;
}else if(Pattern.compile(“[^-+*/()0-9]”).matcher(inputExpression.find()){
//[^…]否定字符类
返回ErrorType.UNKNOWN_符号;
}
老实说,你甚至不需要正则表达式。下面的循环实现了相同的结果,并且更容易查看

String accepted=“-+*/()”;
for(int i=0;i如果(c>='0'&&c='a'&&c='a'&&c您的问题在于
inputExpression.matches
。它不搜索字符串,而是检查整个字符串是否匹配。您需要的是

if(Pattern.compile([A-Za-z]).matcher(inputExpression.find()){
返回ErrorType.Alphabic_符号;
}else if(Pattern.compile(“[^-+*/()0-9]”).matcher(inputExpression.find()){
//[^…]否定字符类
返回ErrorType.UNKNOWN_符号;
}
老实说,你甚至不需要正则表达式。下面的循环得到了相同的结果,并且更容易查看

String accepted=“-+*/()”;
for(int i=0;i如果(c>='0'&&c='a'&&c='a'&&c
inputExpression
的值是多少?这有关系吗?它是从System.in读取的。它可能是任何东西。我给你一个例子:inputExpression=“38+2*3/5+3&”
matches
方法检查整个字符串是否与模式匹配。如果字符串包含与模式匹配的内容,则不会检查,这似乎是您所期望的。为此,您需要使用其他方法,例如第一行中已经使用的
find
。我想检查您认为有效的字符串d、 如果它有任何可能导致错误结果的“隐藏”无效字符,请尝试使用
else if(!inputExpression.matches(.[-+*/()0-9].*)
中的
else if
else if(!Pattern.compile([-+*/()0-9])matcher(inputExpression.find()
。此外,将
“[a-z]”替换为
“[a-zA-z]”
或只是
“\\p{L}”
来匹配任何字母。
inputExpression
的值是多少?这有关系吗?它是从System.in读取的。它可能是任何东西。我给你一个例子:inputExpression=“38+2*3/5+3&”
matches
方法检查整个字符串是否与模式匹配。如果字符串包含与模式匹配的内容,则不会检查,这似乎是您所期望的。为此,您需要使用其他方法,例如第一行中已经使用的
find
。我想检查您认为有效的字符串d、 如果它有任何可能导致错误结果的“隐藏”无效字符,请尝试使用
else if(!inputExpression.matches(.[-+*/()0-9].*)
中的
else if
else if(!Pattern.compile([-+*/()0-9])matcher(inputExpression.find()
。此外,将
“[a-z]”替换为
“[a-zA-z]”
或仅
“\\p{L}”
匹配任何字母。
private static String check(String inputExpression)
{
    if (Pattern.compile("\\p{L}").matcher(inputExpression).find()) {
        return "ErrorType.ALPHABETIC_SYMBOL";
    } else if (!Pattern.compile("[-+*/()0-9]").matcher(inputExpression).find()) {
        return "ErrorType.UNKNOWN_SYMBOL";
    }
    return "Valid";
}
System.out.println(check("9+56"));     = > Valid
System.out.println(check("9+56sdwe")); = >  ErrorType.ALPHABETIC_SYMBOL 
System.out.println(check("^^^"));      = > ErrorType.UNKNOWN_SYMBOL