zoukankan      html  css  js  c++  java
  • Android -- 获取汉字的首字母

    转换                                                                                            

    获取一个汉字的拼音首字母。 GB码两个字节分别减去160,转换成10进制码组合就可以得到区位码例如汉字“你”的GB码是0xC4/0xE3,分别减去0xA0(160)就是0x24/0x430x24转成10进制就是36,0x43是67,那么它的区位码就是3667,在对照表中读音为‘n’。

    XML布局                                                                                     

    复制代码
    <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;
        }
    
    }
    复制代码

    我是天王盖地虎的分割线                                                                 

    image

    源代码:http://pan.baidu.com/s/1qWLklOg  

    中文拼音首字母.zip

    参考:http://www.oschina.net/code/snippet_203635_11850#19466 

  • 相关阅读:
    Tar命令用法详解
    一次Linux系统被攻击的分析过程
    企业系统安全管理和强化的十点建议
    中型企业的IT运维策略
    企业邮件服务器被列入RBL,申请撤销PBL指控
    Xshell远程连接Ubuntu
    LeetCode 7: Reverse Integer
    LeetCode 14: Longest Common Prefix
    LeetCode 203:Remove Linked List Elements
    数据挖掘之处理分类自变量与处理时间变量
  • 原文地址:https://www.cnblogs.com/zhjsll/p/3893670.html
Copyright © 2011-2022 走看看