Java 动态遍历unicode字符

Java 动态遍历unicode字符,java,android,for-loop,unicode,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; 目前,我有两个Array

我正在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;
目前,我有两个ArrayList,cycle和letterCount。循环包含所有可能的字符,输入句子的任何字母都可以。letterCount与cycle的大小相同,并且在运行时,每个值都等于零。当你输入一个句子时,它会在循环中查找任何匹配项(如果字母是英语或阿姆哈拉语,它会找到)。当它找到一个匹配项时,它转到letterCount并将一个添加到相应的值中。因此,如果句子中的第一个字母是“a”,那么它将转到letterCount的第一个值并加上一个。如果是“c”,则转到letterCount的第三个值并加一。 使用for循环动态添加cycle和letterCount中的值:

    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);
    }
for(int i=97;i<123;i++){
char val=(char)i;//这就是问题所在……我想
循环。添加(val);
字母计数。添加(0);
}

但是,执行“(char)i”将其转换为ASCII字符,该字符不包括阿姆哈拉语字符。那么,有没有一种方法可以代替循环使用ASCII码,循环使用unicode字符并将它们添加到循环中?非常感谢您的帮助。

U+1200到U+137F范围内的Unicode包括埃塞俄比亚语和阿姆哈拉语,因此它存在于BMP(基本多语言平面)中,可以用16位值表示

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

错。与其他一些语言不同,Java中的字符有2个字节大,因此对于您的目的来说就足够了


有关更多信息,请参阅:

感谢您的回复!然而,我的意思是,从我搜索的内容来看,阿姆哈拉语的unicode值包括字母(例如:\u126B),我不知道如何循环字母和数字。我也不想硬编码到ArrayList中,因为有很多阿姆哈拉语字符。我应该改写我的问题吗?我还是不知道你想问什么。你需要决定如何准确地表达你不知道怎么做的部分。例如,您是否意识到Unicode代码点可以用十六进制文字表示法写成整数
int i=0x126B
我现在解决了它。我需要的是某种方法(不必是unicode)将数字转换成相应的字符。我使用的代码是这样的:for(int I=4608;I<4954;I++){char val=(char)I;cycle.add(val);letterCount.add(0);}我不想要任何字母,因为我想把它放在for循环中并遍历它。无论如何,谢谢你的帮助!:)@先生,如果不清楚,
char
是一个UTF-16编码单元,其中一个或两个编码一个Unicode码点。因此,您对“不必是Unicode”和“ASCII字符”的引用令人困惑。为了扩展@Patrick的评论,Java、JavaScript、C#、VB、Windows API、Windows NTFS使用UTF-16,Linux ext3、ext4几乎总是使用UTF-16。此外,HTML、CSS、XML等都使用Unicode…。除非您正在查看规范(例如),否则可以假定对ASCII的引用是不适当的。