我将以下字符视为“非法”:
~
,#
,@
,*
,+
,%
,{
,}
,<
,>
,[
,]
,|
,“
,”
,\
,_
,^
我想编写一个检查字符串并确定(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)
。我们可以按照给定的模式分割字符串,然后检查html" target="_blank">数组的长度。如果length为1
,则该模式不在字符串中。
public boolean containsIllegals(String toExamine) {
String[] arr = toExamine.split("[~#@*+%{}<>\\[\\]|\"\\_^]", 2);
return arr.length > 1;
}
如果为arr.length > 1
,则表示字符串包含模式中的字符之一,因此将其拆分。我已经将limit = 2
第二个参数传递给split
,因为我们可以只进行一次拆分。
问题内容: 我需要一个可以告诉我字符串是否包含非字母数字字符的方法。 例如,如果字符串为“ abcdef?” 或“abcdefà”,该方法必须返回true。 问题答案: 使用Apache Commons Lang: 另一种方法是遍历String的字符并检查: 您还剩下一个问题:示例字符串“abcdefà”是字母数字,因为是字母。但我认为您希望将其视为非字母数字,对吗? 因此,您可能想使用正则表达式
我能够通过使用下面这个问题的注释提供的代码来解决这个问题。所有其他帖子都是有效的! 我使用的有用的东西来自第一个评论。虽然提供的所有示例代码似乎也是有效的!
问题内容: 我正在编写一个程序,其中用户以以下格式输入字符串: 我需要检查字符串中是否有数字 然后只提取数字。 如果我使用或,则无论输入的内容是什么,程序都无法在字符串中找到数字,但是仅在只有数字的情况下才能使用。 我可以使用什么作为查找和提取的解决方案? 问题答案: 我使用的解决方案如下所示: 我确信这不是一个完美的解决方案,但它满足了我的需求。谢谢大家的帮助。:)
问题内容: 我正在寻找一个php函数,该函数将接受一个输入字符串,并通过去除所有仅保留字母数字的特殊字符来返回其净化版本。 我需要另一个功能相同但仅返回字母字符AZ的函数。 任何帮助,不胜感激。 问题答案: 警告:请注意,英语不仅限于AZ。 尝试执行以下操作删除az,AZ和0-9以外的所有内容: 如果字母数字的定义包括外语字母和过时的脚本,则您将需要使用Unicode字符类。 尝试以下操作仅保留A
问题内容: 我在寻找Python中的方法。 我想要做: 问题答案: 你可以使用in运算符:
问题内容: 如何检查字符串是否包含\ n或换行符? 问题答案: 如果字符串是在同一程序中构造的,则建议使用以下命令: 但是,如果您指定使用\ n,则此驱动程序说明了如何做: 导致 回应您的评论: 结果是