Validate a string contains only certain characters in java
好吧,我想要做的是用中缀表示法输入用户输入并将其翻译为postfix,然后进行评估。我已经完成了。
我正在努力的是,我需要验证用户输入它只包含以下内容:(),0-9,+, - ,*,/,%
每个字符将用空格分隔,因此这里有一个潜在的有效输入:
(3 + 4)* 5 /(6 - 7)
我创建了一个InvalidCharacterException,如果用户字符串包含除这些字符以外的任何内容,我希望抛出它。
以下是无效输入的样子:
3 - 5 ^ 5
^将是一个无效字符然后我将抛出新的InvalidCharacterException并要求新的输入。
我还会说我已经查看了大量的正则表达式样本,说实话我不明白他们在做什么。
编辑:
好的,这是我最终实现的原因,因为我真的不了解其他任何东西。有关更简单方法的建议吗?
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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。
您可以使用扫描程序验证字符串:
1 2 3 4 5 6 | Scanner scanner = new Scanner(string); String validationResult = scanner.findInLine("[^0-9()+\\-*\\/%]+"); if (validationResult != null) { // Invalid character found. throw new InvalidCharacterException("Invalid character:" + validationResult); } |
findInLine方法返回一个字符串,其字符与正则表达式匹配,正则表达式查找在验证中无效的任何字符。 当String中存在任何无效字符时,findInLine仅返回非null String。
在你的代码中,这可能更好,因为它做同样的事情。
顺便说一句,它可能应该是我
2
3
4
5
6
7
8
9
10
11
char x = infix.charAt(i);
if(!(Character.isDigit(x) || x == '/' || x == '*' ||
x == '+'|| x== '-' || x=='%' || x == '
'))
throw new InvalidCharacterException(x);
/* what you want to do if valid*/
}
我建议你使用一个扫描仪(例如)然后遍历每个字符(在每个标记中)并在符合条件时抛出你的异常(例如查看Character.isDigit)或者只编写你自己的方法来测试可接受的 字符(例如,char包含在"()0123456789 + - * /%"中。