Как я могу проверить каждый символ в массиве символов? - PullRequest
2 голосов
/ 16 октября 2011

Как проверить каждый символ в массиве символов на соответствие строке?Например, я хочу проверить следующие символы: !,@,#,$,%,^,&,*,(,),_,+ против строки 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
}

Дьявол возвращаетсястрока как 'true' означает, что это допустимая строка.Может я что то не так делаю?

Ответы [ 4 ]

3 голосов
/ 16 октября 2011
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;
}

Идея заключается в том, что вы начинаете с предположения, что оно будет ложным, и устанавливаете его в значение true, только если вы найдете недопустимый символ.

Если вы хотите вернуться сразу же после первогонайден недопустимый символ, затем сразу после строки hasIllegalChars = true; вы можете добавить оператор break;.

Чтобы посмотреть на противоположный случай, если вы хотите вернуть true , только если newString содержит ничего, кроме недопустимых символов, тогда вы можете перевернуть все, начать с предположения, что оно истинно и инициализировать 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;

... но в этомcase я бы порекомендовал переименовать метод в isAllIllegalCharacters или что-то подобное.

1 голос
/ 16 октября 2011

Вы пытаетесь проверить, содержит ли какой-нибудь String какой-либо из символов !, @, #, $, %, ^, &, *, (, ), _, +, в каком случае это незаконно? Для простоты использования и понимания я бы предложил Гуава CharMatcher класс.

private static final CharMatcher ILLEGAL_SYMBOLS = 
    CharMatcher.anyOf("!@#$%^&*()_+");

public boolean isLegal(String string) {
  return ILLEGAL_SYMBOLS.matchesNoneOf(string);
}
1 голос
/ 16 октября 2011
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;
}
0 голосов
/ 11 апреля 2014

Я предпочитаю использовать .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;

....
...