如何检查字符数组中的每个字符?

时间:2011-10-16 00:55:43

标签: java string boolean

如何针对字符串检查字符数组中的每个字符?例如,我想针对字符串!,@,#,$,%,^,&,*,(,),_,+检查这些字符: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'返回,这意味着它是一个合法的字符串。也许我做错了什么?

4 个答案:

答案 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 ,那么您可以翻转一下,首先假设它是真的并初始化hasIllegalCharstrue,然后在嵌套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是否包含任何字符!@#$%^&*()_+,在这种情况下,这是非法的?为了便于使用和理解,我建议GuavaCharMatcher课程。

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;

....