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

Validate a string contains only certain characters in java

好吧,我想要做的是用中缀表示法输入用户输入并将其翻译为postfix,然后进行评估。我已经完成了。

我正在努力的是,我需要验证用户输入它只包含以下内容:(),0-9,+, - ,*,/,%

每个字符将用空格分隔,因此这里有一个潜在的有效输入:

(3 + 4)* 5 /(6 - 7)

我创建了一个InvalidCharacterException,如果用户字符串包含除这些字符以外的任何内容,我希望抛出它。

以下是无效输入的样子:

3 - 5 ^ 5

^将是一个无效字符然后我将抛出新的InvalidCharacterException并要求新的输入。

我还会说我已经查看了大量的正则表达式样本,说实话我不明白他们在做什么。

编辑:

好的,这是我最终实现的原因,因为我真的不了解其他任何东西。有关更简单方法的建议吗?

1
2
3
4
5
6
7
8
9
10
11
12
13
    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。


您可以使用扫描程序验证字符串:

1
2
3
4
5
6
    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仅返回非null String。


在你的代码中,这可能更好,因为它做同样的事情。
顺便说一句,它可能应该是我

1
2
3
4
5
6
7
8
9
10
11
 for(int i = 0; i < infix.length(); i++){
        char x = infix.charAt(i);
        if(!(Character.isDigit(x) || x == '/' || x == '*' ||
           x == '+'|| x== '-' || x=='%' || x == '
'
))
            throw new InvalidCharacterException(x);


        /* what you want to do if valid*/

 }


我建议你使用一个扫描仪(例如)然后遍历每个字符(在每个标记中)并在符合条件时抛出你的异常(例如查看Character.isDigit)或者只编写你自己的方法来测试可接受的 字符(例如,char包含在"()0123456789 + - * /%"中。