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