【发布时间】:2013-11-18 01:08:19
【问题描述】:
好的,我正在尝试做的是以中缀表示法获取用户输入并将其转换为后缀,然后对其进行评估。我已经完成了。
我正在苦苦挣扎的是,对于用户输入,我需要验证它是否只包含以下内容:()、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 的用户输入的变量名。
【问题讨论】:
-
在我的回答中检查push方法中的条件语句。它可以代替你的超长条件语句。
标签: java validation