动态迭代unicode字符

时间:2016-12-18 15:29:15

标签: java android for-loop unicode

我正在Android Studio中编写一个可以计算句子每个字母出现次数的应用程序。例如:

// Input
String sentence = "abbdddd";

// Output
a:1; b:2; c:0; d:4; e:0; f:0; // And so on

但是,我也希望它能算上阿姆哈拉语字符,所以如果我输入:

String sentence = "abcሀሁሂ"; 

它会给我:

a:1; b:1; c:1 ... ሀ:1; ሁ:1; ሂ:1;

目前,我有两个ArrayLists,cycle和letterCount。循环具有所有可能的字符,输入句子的任何字母都可以。 letterCount与循环大小相同,并且在运行时,每个值都等于零。当你输入一个句子时,它会查找周期中的任何匹配(如果字母是英文或amharic,它应该找到)。当找到匹配项时,它将转到letterCount并将一个值添加到相应的值。因此,如果句子中的第一个字母是" a",那么它将转到letterCount的第一个值并添加一个。如果它是" c",那么它将转到letterCount的第三个值并添加一个。 cycle和letterCount中的值是使用for循环动态添加的:

    for (int i = 97; i < 123; i++) {
        char val = (char)i; // This is where the problem lies...I think
        cycle.add(val);
        letterCount.add(0);
    }

然而,做&#34;(char)i&#34;将其转换为ASCII字符,该字符不包含阿姆哈拉字符。那么有没有办法,而不是循环通过ASCII,循环通过unicode字符并将它们添加到循环?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

U + 1200到U + 137F范围内的Unicode涵盖Ethiopic和Amharic,因此它存在于BMP(基本多语言平面)中,可以用16位值表示。

  

做“(char)i”将其转换为ASCII字符[???]

假。与其他一些语言不同,Java中的char大2字节,因此足以满足您的需要。

有关详细信息,请参阅:Comparing a char to a code-point?