Как сравнить массив символов с логическим - PullRequest
0 голосов
/ 07 октября 2018

Я не совсем уверен, почему этот фрагмент кода, включающий массив символов, имеет смысл?

String str1 = "Hello"
int[] charSet = new int[128];
char[] chars = str1.toCharArray();
    for (char c : chars) { // count number of each char in s.
        if (charSet[c] == 0)++charSet[c];
    }

Мой вопрос: как вы можете использовать переменную char как индекс для массива charSet и сравнивать его?до 0?

Ответы [ 2 ]

0 голосов
/ 07 октября 2018

код с моими комментариями.

    String str1 = "Hello";
    int[] charSet = new int[128];// ascii chars a-z and A-Z go from 65-122 using a 128 array is just being lazy
    char[] chars = str1.toCharArray();
    for (char c : chars) { //loop though each character in the string
        if (charSet[c] == 0)//c is the character converted to int since it's all a-z A-Z it's between 65 and 122                                
            ++charSet[c];//if it the character hasn't been seen before set to 1
    }
0 голосов
/ 07 октября 2018

A char является 16-разрядным числовым типом без знака и будет расширен до int при использовании в качестве индекса массива.

charSet[c] неявно charSet[(int) c]

Обратите внимание, что код не будет работать, если в строке есть не-ASCII-символы, потому что только ASCII символов находятся в диапазоне кодовой точки Unicode 0-127.Любой другой символ Unicode вызовет ArrayIndexOutOfBoundsException.

...