java - java中验证字符串只包含某些字符

标签 java validation

好吧,我想做的是以中缀表示法获取用户输入并将其转换为后缀,然后对其进行评估。我已经完成了。

我正在努力解决的是,对于用户输入,我需要验证它仅包含以下内容:()、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/

相关文章:

java - 从用户定义的位置运行 jbehave 故事

java - Java 中 == 和 equals() 有什么区别?

java - 如何使用 Scanner 仅接受有效的 int 作为输入

javascript - 禁用 ASP.NET MVC 中某些字段的客户端验证

java - 如何获取Web应用程序的war文件的路径?

java - Java中的链表,如何将字符串数组转换为列表?

javascript - 正则表达式 javascript 中当前年份(例如)19 和 future 年份格式 MMYY 的正则表达式

javafx-2 - JavaFX 2.2 FXML 验证文本字段

java - Java中,空的HashMap空间分配

python - 在 Python 中验证 Oracle 日期