.NET轉JAVA之拼音組件,.netjava拼音
PS:做了4年,自我感覺.NET到瓶頸了,而且公司並沒有深入運用.NET技術的項目,自我學習感覺也沒太大動力(請罵我懶T_T)。再加上技術年限越往上走,了解到的.NET職業提升環境就越來越艱難(個人理解,噴子就不用噴了,噴了對我也沒影響,哈哈哈)。於是於半月前開始學習JAVA技術。公司剛好成立了JAVA開發的小組,就申請調過去了。公司有很多組件都是.NET環境的,對於純粹的JAVA攻城獅來說,對於.NET代碼也比較頭疼,因此,此類任務就扔了一個給我。
由於公司的業務需求,對於中文姓名中的生僻字(針對常用的GB2312來說,不是GBK),需要進行識別並轉換成拼音。對於多個中文姓名,整個姓名拼音字符串出現重復的姓名,需要提示。
首先說說算法:
GB2312有自己的編碼表以及拼音的索引表(我這裡是網上找的) ,然後可以根據自己設計的查找算法制作相應的資源數組。
GB2312的16~55區的一級漢字由根據拼音排序的。將一級漢字轉為字節數組,根據算法定位到前面的資源數組,即可找到相應的拼音。
GB2312的56~87區的二級漢字因為不是使用拼音排序,可以特殊處理,也可以設計兼容的算法(因此資源數組需要自行設計)。
對於生僻字:
超過GB2312中漢字區位的生僻字(當然字節數組依然是兩位),目前使用的是直接導入GBK中的生僻字信息,做成索引器,然後進行索引匹配。
漢字字符串轉字節數組:
.NET中,漢字字符串使用GB2312和GBK編碼方式,對於生僻字,得到的字節都是GBK中的兩位字節數組信息。
但是JAVA中,用GB2312得到的是一個“?”的ASCII碼中的字節,只有使用GBK才能獲取到相應的兩位字節數組。(畢竟GBK對於GB2312是向下完全兼容的)
無符號整數:
由於使用的是索引資源,所以在進行相關的索引計算時,會用到無符號整數。
.NET中有自己定義的無符號整數,而JAVA中是不會存在有無符號整數的,所以需要進行升位的運算,以及存儲(UInt16對應Int,UInt32對應Long)。
字節數組(兩個字節)轉無符號整形:
.NET中有直接的方法。需要注意的是,有些方法進行回轉時,低位在前面,而高位在後面。
JAVA中需要自己寫相應的方法。需要注意高低位的轉換,以及Uint在JAVA中的表示形式。
文件讀取:
由於需要讀取生僻字,因此文件格式轉成了UTF-8。在Windows系統中,MS會為非ASCII編碼的文件的頭部,加入一個BOM(Byte Order Mark),字節順序標記。
JAVA在讀取含有BOM的文件時,讀取第一個字符會出現一個?,可能會影響到程序的後續處理。
解決方法也比較簡單,用類似NOTEPAD++的軟件轉成無BOM的編碼就可以了。
語法大體相同,但是JAVA確實沒那麼多的內置語法,很多底層都需要自己編寫(公司不讓引用第三方的類庫)。
感覺.NET雖然很方便,但是如果不主動,是不用也不會明白很多計算機底層的東西。(其實還是我懶T_T)
JAVA則需要了解很多底層的知識,才能正確的編程,雖然比較痛苦,但是個人感覺需要了解的東西會很多。
感覺入門的話,.NET確實是一門很不錯的語言,但是如果沒什麼主動性的話,JAVA對於程序員對程序相關知識的了解,還是很有幫助的。