好的,我要做的是以中缀表示法输入用户输入并将其翻译为postfix,然后对其进行评估。我已经完成了。
我正在努力的是,我需要验证用户输入它只包含以下内容:(),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。
答案 0 :(得分:2)
您可以使用扫描仪验证字符串:
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仅返回非空字符串。
答案 1 :(得分:1)
我建议您使用Scanner(对于example),然后遍历每个字符(在每个标记中)并在符合条件时抛出您的例外(例如,查看{{3或者只是编写自己的方法来测试可接受的字符(例如,char包含在“()0123456789 + - * /%”中。
答案 2 :(得分:1)
在你的代码中,这可能更好,因为它做同样的事情。 顺便说一句,它可能应该是我&lt; infix.length()不是&lt; =
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*/
}