如何针对字符串检查字符数组中的每个字符?例如,我想针对字符串!,@,#,$,%,^,&,*,(,),_,+
检查这些字符:af!a$co
。但是没有正则表达式。
这有意义吗?
public boolean IllSymbols(String newString)
{
char [] data = {'!', '#', '$', '%', '^', '&', '*', '(', ')' };
String str = new String(data);
for (int i=0; i<str.length(); i++)
{
for (int j=0; j<local.length(); j++)
{
if (str.charAt(i)==local.charAt(j))
{
return true;
}
}
}
return false;
}
但是当我在主要方法中检查单词af!a$co
时
if (IllSymbols(newString)==true)
{
return false; // false = text is illegal
}
else
{
return true; // true = text is legal
}
devil将字符串作为'true'返回,这意味着它是一个合法的字符串。也许我做错了什么?
答案 0 :(得分:3)
public boolean hasIllegalCharacters(String newString) {
boolean hasIllegalChars = false;
char[] illegalChars = {'!', '#', '$', '%', '^', '&', '*', '(', ')' };
for (int i = 0; i < newString.length; i++) {
for (int j = 0; j < illegalChars.length; j++) {
if (newString.charAt(i) == illgalChars[j]) {
hasIllegalChars = true;
}
}
}
return hasIllegalChars;
}
这里的想法是你首先假设它是假的,并且只有在你找到一个非法的角色时才将它设置为真。
如果您想在找到第一个非法字符后立即返回,那么就在hasIllegalChars = true;
行之后,您可以添加break;
语句。
要查看相反的情况,如果您想要仅在 newString
包含 非非法字符时才返回true ,那么您可以翻转一下,首先假设它是真的并初始化hasIllegalChars
到true
,然后在嵌套false
循环内将其设置为for
,如果不的话找到一个非法字符,使用此代码(for
循环和方法声明是相同的):
hasIllegalCharacters = true;
...nested for loops...
if (newString.charAt(i) != illegalChars[j]) {
hasIllegalChars = false;
// optional "break;" or "return false;" statement here
}
...
return hasIllegalChars;
...但在这种情况下,我建议将方法重命名为“isAllIllegalCharacters”或类似的东西。
答案 1 :(得分:1)
public boolean illSymbols(String newString) {
char [] data = {'!', '#', '$', '%', '^', '&', '*', '(', ')' };
for(int i=0; i<data.length; i++) {
if(newString.indexOf(data[i]) > -1) { // if the string contains the character
return false; // return false
}
}
return true;
}
答案 2 :(得分:1)
您是否尝试检查某些String
是否包含任何字符!
,@
,#
,$
,%
, ^
,&
,*
,(
,)
,_
,+
,在这种情况下,这是非法的?为了便于使用和理解,我建议Guava的CharMatcher课程。
private static final CharMatcher ILLEGAL_SYMBOLS =
CharMatcher.anyOf("!@#$%^&*()_+");
public boolean isLegal(String string) {
return ILLEGAL_SYMBOLS.matchesNoneOf(string);
}
答案 3 :(得分:0)
我更喜欢使用.contains()
....
for(int i=0; i < check.length; i++){
for(int j=0; j < illegalChar.length; i++){
if(check[i].contains(illegalChar[j])
return false;
}
}
return true;
....