Java контролирует верхний и нижний регистр в 2 строки

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

Например, эти строки:

  1. Ahh7h
  2. aHH7H

Результат будет true

Я написал этот код, но результат всегда false. Почему?

public boolean checkString(String serverString, String clientString) {
    if (serverString.length() != clientString.length())
        return false;
    else
        for (int i = 0; i < clientString.length(); i++) {
            if ((clientString.charAt(i) >= '0' && clientString.charAt(i) <= '9')
                    && (clientString.charAt(i) != serverString.charAt(i)))
                return false;
            else if (clientString.charAt(i) >= 'A'
                    && clientString.charAt(i) <= 'Z') {
                if ((int) clientString.charAt(i) != ((int) serverString
                        .charAt(i) + 32))
                    return false;
            } else if (clientString.charAt(i) >= 'a'
                    && clientString.charAt(i) <= 'z') {
                if ((int) clientString.charAt(i) != ((int) serverString
                        .charAt(i) - 32))
                    return false;
            }
        }
    return true;
}

person user2328999    schedule 01.05.2013    source источник
comment
Используйте последовательный и логичный отступ для блоков кода. Отступ кода предназначен для того, чтобы помочь людям понять ход программы! Также обратите внимание, что никогда не требуется более одной пустой строки пробела.   -  person Andrew Thompson    schedule 01.05.2013


Ответы (2)


Вы можете «инвертировать» одну строку, используя: могу ли я инвертировать регистр String в Java?, а затем использовать метод Strings .equals для их сравнения.

Метод из Как я могу инвертировать случай Строка в Java? включена для полноты картины:

public static String reverseCase(String text)
{
    char[] chars = text.toCharArray();
    for (int i = 0; i < chars.length; i++)
    {
        char c = chars[i];
        if (Character.isUpperCase(c))
        {
            chars[i] = Character.toLowerCase(c);
        }
        else if (Character.isLowerCase(c))
        {
            chars[i] = Character.toUpperCase(c);
        }
    }
    return new String(chars);
}
person Richard Tingle    schedule 01.05.2013

Вы поменяли местами + 32 и - 32.

Кстати, гораздо проще использовать такие методы, как:

Character.isDigit
Character.isLowerCase
Character.isUpperCase
Character.toLowerCase
Character.toUpperCase
person Lone nebula    schedule 01.05.2013