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

Java 索引17附近的非法字符范围,java,exception,Java,Exception,我是java新手,我想创建一个输入检查器类,当您输入一个值(无论是int、string还是double)时,它将检查该值是否包含非法字符,如果包含,则返回false 现在,即使它可能很糟糕,也没有多大意义,我还是设法编写了一个代码来做到这一点,问题是它在索引17异常附近给了我一个非法字符范围 代码如下: public class InputChecker { public InputChecker() { } public boolean checkStrin

我是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();
    }


}
公共类输入检查器{
公共输入检查器()
{
}
公共布尔校验字符串(字符串)
{
Pattern Pattern=Pattern.compile(“[1234567890,.-\!”~\\\\@*+%{}\\[\\]\\\\”\\\\\\\\\”);
Matcher-Matcher=pattern.Matcher(字符串);
返回matcher.find();
}
公共布尔校验双精度(双精度)
{
Pattern Pattern=Pattern.compile(“[,-!”~\\@*+%{}\\\[\\]\\\\\”\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\;
String sDouble=String.valueOf(double);
Matcher Matcher=pattern.Matcher(sDouble);
返回matcher.find();
}
公共布尔checkInt(int theInt)
{
Pattern Pattern=Pattern.compile(“[,-!”~\\@*+%{}\\\[\\]\\\\\”\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\;
String sInt=String.valueOf(theInt);
匹配器匹配器=模式匹配器(sInt);
返回matcher.find();
}
}

在您的
检查字符串
方法中,对点
\\.
?!
使用转义字符,而不是
,因为点是特殊字符,而lookahead由
?!
定义

因为我完全不知道你想做什么



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

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

[...]
在字符类中,
-
指定一个范围:左右两个字符的ascii值之间的所有值(包括)

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

“[-1234567890,.!”~\@*+%{}\\[\]\\\\\\\\\\”[uu^]

在我的例子中,由于范围中存在西里尔字符,引发了以下异常:
[а-а]
在我的Spring Boot项目中。我用
\p{L}
替换了这个范围,它成功了。您可以在这里找到描述:

您的问题中给出的解释不够清楚。你有三种方法,哪里有例外?天哪,我很抱歉。我在checkString方法中发现错误。为什么要使用regex来执行此操作。我宁愿使用Integer.valueOf(String)checkDouble和checkInt是不必要的,double或int永远不会等于排除列表中的任何值。它们永远只会是数字的字符串表示。正如我所说,我完全是个初学者,但我想项目是最好的学习方式。你能解释一下Integer.valueOf(String)吗?基本上,我需要检查“人”名字中的字符是否有效,因为我需要它来检查在我工作的汽车旅馆预订房间的程序中的名字。那么你想检查名字是否只包含字母表吗?我只是尝试添加\\。还有?!而且它有效!非常感谢。
"[-1234567890,.!'~#@*+%{}<>\\[\\]|\"_^]"