[英]Find mathematical operators in Java String?
我希望能夠判斷字符串是否是數學表達式。 我的問題的真正本質是找到與任何這些符號不匹配的符號:*,/,+, - ,(,),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語句並期望在我的字符串中找到字母符號,該程序是有效的。
我嘗試執行以下操作:將匹配方法更改為.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;
}
代碼仍然無法正常工作。 我有邏輯錯誤。
您可以使用以下代碼(只需替換方法輸出類型並根據需要返回值):
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";
}
請參閱Java在線演示
System.out.println(check("9+56")); = > Valid
System.out.println(check("9+56sdwe")); = > ErrorType.ALPHABETIC_SYMBOL
System.out.println(check("^^^")); = > ErrorType.UNKNOWN_SYMBOL
細節 :
\\\\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()) {
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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.