![](/img/trans.png)
[英]Java - what is the best way to check if a STRING contains only certain characters?
[英]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.