好吧,我想做的是以中缀表示法获取用户输入并将其转换为后缀,然后对其进行评估。我已经完成了。
我正在努力解决的是,对于用户输入,我需要验证它仅包含以下内容:()、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 仅返回非空字符串。
关于java - java中验证字符串只包含某些字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20038426/