返回字符串是否包含非法字符的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...

}

}

有没有更优雅/有效的方法来实现这一目标?

回答:

您可以在此处使用PatternMatcher类。您可以将所有已过滤的字符放在一个字符类中,并使用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函数 的全部内容, 来源链接: www.h5w3.com/qa/419992.html

回到顶部