Что делает метод getCharNumber нечувствительным к регистру, когда он проверяет только строчные буквы (автор CtCI) - PullRequest
0 голосов
/ 13 июля 2020
public class Common {

    public static int getCharNumber(Character c) {
        int a = Character.getNumericValue('a');
        int z = Character.getNumericValue('z');
        
        int val = Character.getNumericValue(c);
        if (a <= val && val <= z) {
            return val - a;
        }
        return -1;
    }
    
    public static int[] buildCharFrequencyTable(String phrase) {
        int[] table = new int[Character.getNumericValue('z') - Character.getNumericValue('a') + 1];
        for (char c : phrase.toCharArray()) {
            int x = getCharNumber(c);
            if (x != -1) {
                table[x]++;
            }
        }
        return table;
    }
}

Вышеупомянутый алгоритм использовался для проверки того, является ли строка перестановкой палиндрома и был создан CtCI (Cracking the Coding Interview).

Мой вопрос : Почему метод getCharNumber нечувствителен к регистру?

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

1 Ответ

0 голосов
/ 13 июля 2020

Почему в getCharNumber регистр не учитывается?

Метод getCharNumber использует метод Java Character#getNumericValue(char), для которого используется JavaDo c указывает, в частности:

Буквы AZ в верхнем регистре (от '\ u0041' до '\ u005A'), нижнем регистре (от '\ u0061' до '\ u007A') и вариант полной ширины ( Формы от '\ uFF21' до '\ uFF3A' и '\ uFF41' до '\ uFF5A') имеют числовые c значения от 10 до 35. Это не зависит от спецификации Unicode, которая не присваивает числовые c значения для эти значения char.

Это означает, что, например, для символа A и a этот метод API возвращает то же значение , т.е. 10, и, следовательно, нет случая -чувствительность.

Для справки см. Также

...