2016-12-18 92 views
1

我寫在Android Studio中的應用程序,可以算一個句子的每個字母的出現。例如:通過迭代Unicode字符的動態

// 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與循環的大小相同,並且在運行時,每個值都等於零。當你輸入一個句子時,它會查找循環中的任何匹配項(如果該字母是英語或阿姆哈拉語,它應該找到)。當它找到匹配時,它將轉到letterCount並將其添加到相應的值。因此,如果句子中的第一個字母是「a」,那麼它將轉到letterCount的第一個值並添加一個。如果它是「c」,則它轉到letterCount的第三個值並添加一個。 內部循環和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); 
    } 

但是,這樣做「(炭)I」將其轉換成ASCII字符,不包括阿姆哈拉字符。那麼有沒有辦法,而不是循環通過ASCII,循環unicode字符,並將它們添加到循環?任何幫助將不勝感激。

回答

1

在Unicode的U + 1200至U + 137F的範圍覆蓋埃塞俄比亞以及阿姆哈拉,所以它在BMP(基本多語種平面)存在,並且可以通過一個16位的值來表示。

做 「(炭)I」 將其轉換成ASCII字符[???]

假。與其他一些語言不同,Java中的char大小爲2個字節,因此足以滿足您的需要。

欲瞭解更多信息,請參閱:Comparing a char to a code-point?

+0

感謝您的迴應!然而,我的意思是,從我搜索了起來,爲阿姆哈拉語的Unicode值包括字母(例如:\ u126B),我不知道如何通過字母和數字環路。我也不想將它硬編碼到ArrayLists中,因爲有很多阿姆哈拉字符。我應該改寫我的問題嗎? –

+0

我還不確定你想問什麼。你需要決定如何正確表達你不知道該怎麼做的部分。例如,你是否意識到一個Unicode代碼點可以寫成一個帶有十六進制文字符號的整數? 'int i = 0x126B' –

+0

我現在解決了。我需要的是某種方式(不必是unicode)將數字轉換爲相應的字符。我使用的代碼是這樣的:for(int i = 4608; i <4954; i ++){char val =(char)i; cycle.add(VAL); letterCount.add(0);}我不想要任何字母,因爲我想將它放在for循環中並遍歷它。無論如何,感謝您的幫助! :) –