我是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();
}
}
答案 0 :(得分:1)
在您的checkString
方法中使用点击\\.
的转义字符和?!
而不是!
,因为点是特殊字符,前瞻是由?!
定义的。< / p>
因为我完全 anaware 你想要做什么。
您可以使用\\w+
来匹配String
是否包含一个或多个字符。
答案 1 :(得分:1)
每个正则表达式都有相同的错误。您可以定义字符类:
[...]
你在其中使用-
。在字符类中,-
指定一个范围:左右两个字符的ascii值之间的所有值(包括)。
看起来你真的希望将-
作为角色类的一部分。在这种情况下,只需将其移到前面(对于其他人也是如此;注意:我删除了不必要的反斜杠):
"[-1234567890,.!'~#@*+%{}<>\\[\\]|\"_^]"