J2ME經驗總結之漢字轉拼音

2021-04-13 14:19:25 字數 2047 閱讀 1463

在網上參考了一些漢字轉換到拼音的資料。思路應該只有以下兩種。

1,查表法。這樣做需要乙個龐大的對映表,在j2me環境下不大合適。不過效果好,有些還支援多音字。

2,使用gb字型檔的對映關係。因為gb2312及其擴充套件gbk的漢字編碼都根據區位於拼音存在對映關係。

實際上網路上的大部分文章都是根據第二種方法來實現的。

首先來介紹下原始的**,由於這個**在網上存在多個版本,並不知道原始作者是誰。

再次鄙視哪些剽竊人家東西不留名的人。

以下是乙個重要片段。

/*** 獲得單個漢字的ascii.

* @param

cn char

* 漢字字元

* @return

int* 錯誤返回 0,否則返回ascii

*/public

static

intgetcnascii(

char

cn) 

if(bytes.length ==1

) if

(bytes.length ==2

) return0; 

//錯誤}

這個方法中有乙個片段大家需要注意,「(string.valueof(cn)).getbytes();」這一句。

這裡獲得的應該是gbk編碼,可不是unicode。

unicode是無法使用現在的方法來獲取拼音的,只能用查表法,弄一張對於j2me來說很龐大的對映表。

下面詳細介紹一下我改進後的方法。並且對原始**的作者表示感謝,雖然不知道他是誰。 

public

class

hgb2pinyin ;

private

int code =;

public

string getpinyin(string gb2312) 

char

chars 

=gb2312.tochararray();

stringbuffer retubuf 

=new

stringbuffer();

for(

inti =0

, len 

=chars.length; i 

<

len; i

++//

end of for

return

retubuf.tostring();

}public

string getpinyin(

char

gb2312)  

else

else //

end of if spell == null}}

private

intgetcnascii(

char

cn)  

catch

(exception e) 

if(bytes 

==null

||bytes.length 

>2||

bytes.length 

<=0) 

if(bytes.length ==1

)  else

}private

string getspellbyascii(

intascii) 

if(ascii 

<

-20319

||ascii 

>

-10247

) int

ind;

for(ind =0

; ind 

<

code.length; ind

++) 

}return

name[ind];}}

首先我去除了比較多餘的linkedhashmap,同時解決了原始**中查詢時比較弱的查詢方式。直接通過陣列索引做判斷(參考getspellbyascii函式,如果有興趣,各位可以把迴圈判斷區間改為二分法,效果會好很多,畢竟是395的陣列,要找到區間最壞情況下要遍歷整個陣列並判斷395次)。

j2me學習總結

j2me隨著最後乙個遊戲的完成,可以畫上乙個小句號了。做了幾個東西,簡單說一下。環境winxp eclipse netbeans 手機 nokia5230,s60v5平台 1 冷笑話 這個就是入門,執行之後可以看一些冷笑話,還有謎語之類的,用的是j2me自帶的ui 2.貪食蛇。就是貪食蛇,用了遊戲的...

J2me拼音輸入法

相信我,其實我一直很想寫乙個輸入法的.好吧,我承認我一直卡在獲取字型檔上面了,我實在太懶了.乙個契機,pinkrat提供了乙個現成的字型檔 讓我在這裡感謝一下他,沒有他的貢獻,我的輸入法可能也許大概就不會出現了。總體來講,輸入法本身沒有什麼太多的幾乎含量,主要在字型檔的組織和檢索效率上面。我採用了索...

J2ME中索引值 index 使用總結

在j2me 技術中,很多地方都需要使用索引值來進行編號,但是有些索引值是從 1開始的,有些又是從 0開始的,給使用造成了很多的不便,這裡對於經常使用到的索引值進行簡單的總結,並希望 sun公司在後續的版本中,能夠逐漸統一這些內容,方便程式開發人員進行實際的使用。1 從 0開始的索引值 a 陣列的下標...