验证字符串仅包含java中的某些字符

时间:2013-11-18 01:08:20

标签: java validation

好的,我要做的是以中缀表示法输入用户输入并将其翻译为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。

3 个答案:

答案 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*/

 }