索引 17 附近的非法字符范围

Nig*_*aye 3 java exception

我是java新手,我想制作一个输入检查器类,当您输入一个值(无论是int、string还是double)时,它会检查它是否不包含非法字符,如果包含,则返回false。

现在,即使它可能很糟糕并且没有多大意义,我还是设法编写了一个代码来做到这一点,问题是它给了我一个接近索引 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();
    }


}
Run Code Online (Sandbox Code Playgroud)

Jus*_*tin 5

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

[...]
Run Code Online (Sandbox Code Playgroud)

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

看来您确实希望将其-作为角色类的一部分。在这种情况下,只需将其移到前面(其他也一样;注意:我删除了不必要的反斜杠):

"[-1234567890,.!'~#@*+%{}<>\\[\\]|\"_^]"
Run Code Online (Sandbox Code Playgroud)