Android程序開(kāi)發(fā)之獲取漢字的首字母
獲取一個(gè)漢字的拼音首字母。 GB碼兩個(gè)字節(jié)分別減去160,轉(zhuǎn)換成10進(jìn)制碼組合就可以得到區(qū)位碼例如漢字“你”的GB碼是0xC4/0xE3,分別減去0xA0(160)就是0x24/0x430x24轉(zhuǎn)成10進(jìn)制就是36,0x43是67,那么它的區(qū)位碼就是3667,在對(duì)照表中讀音為‘n'。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity" > <EditText android:id="@+id/edit" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="輸入漢字" > </EditText> <Button android:id="@+id/button" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="button" > </Button> <TextView android:id="@+id/textView" android:layout_width="fill_parent" android:layout_height="wrap_content" > </TextView> </LinearLayout> public class MainActivity extends Activity { static final int GB_SP_DIFF = 160; // 存放國(guó)標(biāo)一級(jí)漢字不同讀音的起始區(qū)位碼 static final int[] secPosValueList = { 1601, 1637, 1833, 2078, 2274, 2302, 2433, 2594, 2787, 3106, 3212, 3472, 3635, 3722, 3730, 3858, 4027, 4086, 4390, 4558, 4684, 4925, 5249, 5600 }; // 存放國(guó)標(biāo)一級(jí)漢字不同讀音的起始區(qū)位碼對(duì)應(yīng)讀音 static final char[] firstLetter = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'w', 'x', 'y', 'z' }; private EditText edit; private TextView text; private Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); edit = (EditText) this.findViewById(R.id.edit); text = (TextView) this.findViewById(R.id.textView); button = (Button) this.findViewById(R.id.button); button.setOnClickListener(buttonListener); text.setText("拼音"); } private View.OnClickListener buttonListener = new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if (v == button) { String characters = edit.getText().toString(); String spells = getSpells(characters); text.setText(spells); } } }; public static String getSpells(String characters) { StringBuffer buffer = new StringBuffer(); for (int i = 0; i < characters.length(); i++) { char ch = characters.charAt(i); if ((ch >> 7) == 0) { // 判斷是否為漢字,如果左移7為為0就不是漢字,否則是漢字 } else { char spell = getFirstLetter(ch); buffer.append(String.valueOf(spell)); } } return buffer.toString(); } // 獲取一個(gè)漢字的首字母 public static Character getFirstLetter(char ch) { byte[] uniCode = null; try { uniCode = String.valueOf(ch).getBytes("GBK"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); return null; } if (uniCode[0] < 128 && uniCode[0] > 0) { // 非漢字 return null; } else { return convert(uniCode); } } /** * 獲取一個(gè)漢字的拼音首字母。 GB碼兩個(gè)字節(jié)分別減去160,轉(zhuǎn)換成10進(jìn)制碼組合就可以得到區(qū)位碼 * 例如漢字“你”的GB碼是0xC4/0xE3,分別減去0xA0(160)就是0x24/0x43 * 0x24轉(zhuǎn)成10進(jìn)制就是36,0x43是67,那么它的區(qū)位碼就是3667,在對(duì)照表中讀音為‘n' */ static char convert(byte[] bytes) { char result = '-'; int secPosValue = 0; int i; for (i = 0; i < bytes.length; i++) { bytes[i] -= GB_SP_DIFF; } secPosValue = bytes[0] * 100 + bytes[1]; for (i = 0; i < 23; i++) { if (secPosValue >= secPosValueList[i] && secPosValue < secPosValueList[i + 1]) { result = firstLetter[i]; break; } } return result; } }
以上所述是小編給大家介紹的Android程序開(kāi)發(fā)之獲取漢字的首字母,希望對(duì)大家有所幫助!
相關(guān)文章
Kotlin 使用高階函數(shù)實(shí)現(xiàn)回調(diào)方式
這篇文章主要介紹了Kotlin 使用高階函數(shù)實(shí)現(xiàn)回調(diào)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03Android實(shí)現(xiàn)擴(kuò)展Menu的方法
這篇文章主要介紹了Android實(shí)現(xiàn)擴(kuò)展Menu的方法,涉及Android操作menu菜單的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10Android Studio 新建項(xiàng)目通過(guò)git上傳到碼云圖文教程詳解
本文通過(guò)圖文并茂的方式給大家介紹了Android Studio 新建項(xiàng)目通過(guò)git上傳到碼云的方法,需要的朋友可以參考下2017-11-11Android實(shí)現(xiàn)二級(jí)列表購(gòu)物車(chē)功能
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)二級(jí)列表購(gòu)物車(chē)功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10Android實(shí)現(xiàn)ImageView圖片雙擊放大及縮小
這篇文章主要介紹了Android實(shí)現(xiàn)ImageView圖片雙擊放大及縮小的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-02-02Android 如何獲取手機(jī)總內(nèi)存和可用內(nèi)存等信息
這篇文章主要介紹了Android系統(tǒng)檢測(cè)程序內(nèi)存占用各種方法,并對(duì)內(nèi)存信息的詳細(xì)介紹,需要的朋友可以參考下2016-07-07Android HttpClient GET或者POST請(qǐng)求基本使用方法
在Android開(kāi)發(fā)中我們經(jīng)常會(huì)用到網(wǎng)絡(luò)連接功能與服務(wù)器進(jìn)行數(shù)據(jù)的交互,為此Android的SDK提供了Apache的HttpClient來(lái)方便我們使用各種Http服務(wù).這里只介紹如何使用HttpClient發(fā)起GET或者POST請(qǐng)求2012-12-12Kotlin使用TransitionDrawable實(shí)現(xiàn)顏色漸變效果流程講解
這篇文章主要介紹了Kotlin使用TransitionDrawable實(shí)現(xiàn)顏色漸變效果,這里,我們通過(guò)TransitionDrawable顯示顏色漸變效果,包括背景顏色的變化,以及圖片與圖片的漸變效果2023-02-02Android數(shù)據(jù)存儲(chǔ)方式操作模式解析
這篇文章主要為大家介紹了Android數(shù)據(jù)存儲(chǔ)方式操作模式解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08