簡體   English   中英

驗證字符串僅包含Java中的某些字符

[英]Validate a string contains only certain characters in java

好的,我想做的是采用用戶輸入的中綴符號並將其轉換為后綴,然后對其進行評估。 我已經完成了。

我正在努力的是針對用戶輸入,我需要驗證它僅包含以下內容:(),0-9,+,-,*,/,%

每個字符將用空格分隔,因此這是一個潛在的有效輸入:

(3 + 4)* 5 /(6-7)

我創建了一個InvalidCharacterException,如果用戶字符串包含除那些字符以外的任何其他字符,我希望拋出該異常。

這是無效輸入的樣子:

3-5 ^ 5

^將是一個無效字符,然后我將拋出新的InvalidCharacterException並請求新的輸入。

我還要說,我查看了很多正則表達式樣本,老實說,我不明白他們在做什么。

編輯:

好的,這就是我最終實現的,因為我什么都不懂。 有更簡單的建議嗎?

    for(int i = 0; i <= infix.length(); i++){
        if(infix.charAt(i) ==  '(' || infix.charAt(i) == ')' || infix.charAt(i) =='+' 
                || infix.charAt(i) =='-' ||infix.charAt(i) == '*' ||infix.charAt(i) == '/'
                ||infix.charAt(i) == '%' ||infix.charAt(i) ==' ' ||infix.charAt(i) == '0' 
                ||infix.charAt(i) == '1' || infix.charAt(i) =='2' || infix.charAt(i) =='3' 
                ||infix.charAt(i) == '4' ||infix.charAt(i) == '5' ||infix.charAt(i) == '6' 
                ||infix.charAt(i) == '7' || infix.charAt(i) =='8' ||infix.charAt(i) == '9'){

        }else{
            throw new InvalidCharacterException(infix.charAt(i));
        }

    }

Infix是我的用戶輸入的變量名稱,為StringBuffer。

您可以使用掃描儀來驗證您的字符串:

    Scanner scanner = new Scanner(string);        
    String validationResult = scanner.findInLine("[^0-9()+\\-*\\/%]+");
    if (validationResult != null) {
        // Invalid character found.
        throw new InvalidCharacterException("Invalid character: " + validationResult);
    }

findInLine方法返回一個字符串,該字符串具有與正則表達式匹配的字符,並且正則表達式查找在驗證中無效的任何字符。 當字符串中有任何無效字符時,findInLine僅返回非空字符串。

我建議您使用Scanner例如 ),然后遍歷每個字符(在每個令牌中),如果滿足條件(例如,查看Character.isDigit ),則拋出Exception,或者只是編寫自己的方法來測試可接受性字符(例如,char是否包含在“()0123456789 +-* /%”中)。

在您的代碼中,這樣做可能更好,因為它做同樣的事情。 順便說一句,它可能應該是我<infix.length()而不是<=

 for(int i = 0; i < infix.length(); i++){
        char x = infix.charAt(i);
        if(!(Character.isDigit(x) || x == '/' || x == '*' ||
           x == '+'|| x== '-' || x=='%' || x == '\n'))
            throw new InvalidCharacterException(x);


        /* what you want to do if valid*/

 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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