簡體   English   中英

在Java String中查找數學運算符?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM