在網上參考了一些漢字轉換到拼音的資料。思路應該只有以下兩種。
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 陣列的下標...