指数17附近的非法字符范围

时间:2014-06-18 04:42:25

标签: java exception

我是java的新手,我想创建一个输入检查器类,当你输入一个值(是int,string或double)时,它会检查它是否包含非法字符,如果它确实,返回错误。

现在,即使它可能很糟糕并且没有多大意义,我设法制作代码来做到这一点,问题是它在索引17异常附近给了我一个非法的字符范围。

这是代码:

public class InputChecker {
    public InputChecker()
    {

    }

    public boolean checkString(String string)
    {
        Pattern pattern = Pattern.compile("[1234567890,.-\\!'~#\\@*+%{}<>\\[\\]|\"\\_^]");
        Matcher matcher = pattern.matcher(string);
        return matcher.find();

    }

    public boolean checkDouble(double theDouble)
    {
        Pattern pattern = Pattern.compile("[,-!'~#@*+%{}<>\\[\\]|\"\\_^]");
        String sDouble = String.valueOf(theDouble);
        Matcher matcher = pattern.matcher(sDouble);
        return matcher.find();
    }

    public boolean checkInt(int theInt)
    {
        Pattern pattern = Pattern.compile("[,-!'~#@*+%{}<>\\[\\]|\"\\_^]");
        String sInt = String.valueOf(theInt);
        Matcher matcher = pattern.matcher(sInt);
        return matcher.find();
    }


}

2 个答案:

答案 0 :(得分:1)

在您的checkString方法中使用点击\\.的转义字符和?!而不是!,因为点是特殊字符,前瞻是由?!定义的。< / p>

因为我完全 anaware 你想要做什么。


您可以使用\\w+来匹配String是否包含一个或多个字符

答案 1 :(得分:1)

每个正则表达式都有相同的错误。您可以定义字符类:

[...]

你在其中使用-。在字符类中,-指定一个范围:左右两个字符的ascii值之间的所有值(包括)。

看起来你真的希望将-作为角色类的一部分。在这种情况下,只需将其移到前面(对于其他人也是如此;注意:我删除了不必要的反斜杠):

"[-1234567890,.!'~#@*+%{}<>\\[\\]|\"_^]"