返回字符串是否包含非法字符的Java函数
我将以下字符视为“非法”:
~
,#
,@
,*
,+
,%
,{
,}
,<
,>
,[
,]
,|
,“
,”
,\
,_
,^
我想编写一个检查字符串并确定(true
/ false
)该字符串是否包含以下非法内容的方法:
public boolean containsIllegals(String toExamine) { return toExamine.matches("^.*[~#@*+%{}<>[]|\"\\_^].*$");
}
但是,matches(...)
对此进行简单检查是不可行的。我需要一种方法来扫描字符串中的每个字符,并确保它不是这些字符之一。当然,我可以做一些
可怕的 事情:
public boolean containsIllegals(String toExamine) { for(int i = 0; i < toExamine.length(); i++) {
char c = toExamine.charAt(i);
if(c == '~')
return true;
else if(c == '#')
return true;
// etc...
}
}
有没有更优雅/有效的方法来实现这一目标?
回答:
您可以在此处使用Pattern
和Matcher
类。您可以将所有已过滤的字符放在一个字符类中,并使用Matcher#find()
方法检查您的模式是否在字符串中可用。
您可以这样做:-
public boolean containsIllegals(String toExamine) { Pattern pattern = Pattern.compile("[~#@*+%{}<>\\[\\]|\"\\_^]");
Matcher matcher = pattern.matcher(toExamine);
return matcher.find();
}
find()
如果在字符串中找到给定的模式(即使一次),方法将返回true。
尚未指出的另一种方法是使用String#split(regex)
。我们可以按照给定的模式分割字符串,然后检查数组的长度。如果length为1
,则该模式不在字符串中。
public boolean containsIllegals(String toExamine) { String[] arr = toExamine.split("[~#@*+%{}<>\\[\\]|\"\\_^]", 2);
return arr.length > 1;
}
如果为arr.length > 1
,则表示字符串包含模式中的字符之一,因此将其拆分。我已经将limit =
2第二个参数传递给split
,因为我们可以只进行一次拆分。
以上是 返回字符串是否包含非法字符的Java函数 的全部内容, 来源链接: utcz.com/qa/419992.html