Android程序开发之获取汉字的首字母
程序员文章站
2024-02-27 13:37:03
获取一个汉字的拼音首字母。 gb码两个字节分别减去160,转换成10进制码组合就可以得到区位码例如汉字“你”的gb码是0xc4/0xe3,分别减去0xa0(160)就是0x...
获取一个汉字的拼音首字母。 gb码两个字节分别减去160,转换成10进制码组合就可以得到区位码例如汉字“你”的gb码是0xc4/0xe3,分别减去0xa0(160)就是0x24/0x430x24转成10进制就是36,0x43是67,那么它的区位码就是3667,在对照表中读音为‘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; // 存放国标一级汉字不同读音的起始区位码 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 }; // 存放国标一级汉字不同读音的起始区位码对应读音 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(); } // 获取一个汉字的首字母 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); } } /** * 获取一个汉字的拼音首字母。 gb码两个字节分别减去160,转换成10进制码组合就可以得到区位码 * 例如汉字“你”的gb码是0xc4/0xe3,分别减去0xa0(160)就是0x24/0x43 * 0x24转成10进制就是36,0x43是67,那么它的区位码就是3667,在对照表中读音为‘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程序开发之获取汉字的首字母,希望对大家有所帮助!
推荐阅读
-
Android程序开发之获取汉字的首字母
-
Android程序开发之给背景图加上移动的手势
-
Android程序开发之获取汉字的首字母
-
Android开发之开门狗在程序锁中的应用实例
-
Android开发之在程序中时时获取logcat日志信息的方法(附demo源码下载)
-
Android开发之获取LayoutInflater对象的方法总结
-
Android开发之开门狗在程序锁中的应用实例
-
Android开发之在程序中时时获取logcat日志信息的方法(附demo源码下载)
-
Android开发之使用ExifInterface获取拍照后的图片属性
-
Android开发之获取LayoutInflater对象的方法总结