专栏首页写代码和思考Android开发 - 汉字转拼音首字母

Android开发 - 汉字转拼音首字母

概述

工作中经常会遇到的一些排序问题,比如 按汉字的拼音首字母排序,比如人名排序等,就要用到下面的方法了,思路:

1.获得汉字

2.将汉字转换成首字母,并记录下(必要时保存到数据库)

3.按首字母进行排序并展示

演示

控制台输出演示:

汉字转首字母演示,请输入汉字: 4654*&&^_FDSF你i好3啊>?>?>(*33P{}{

直接转换convertTo: 4654*&&^_FDSFnih3a>?>?>(*33P{}{ 保留一些字符convertAndClear: 4654&&^_FDSFnih3a>?>?>(33P{}{ 仅保留字母和数字convertAndClearAll: 4654FDSFnih3a33P

实现

代码如下,直接复制后就能使用:

package pinyin;

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("汉字转首字母演示,请输入汉字:");
        String str = sc.next();
        String py1 = ChineseToFirstCharUtil.convertTo(str);
        String py2 = ChineseToFirstCharUtil.convertAndClear(str);
        String py3 = ChineseToFirstCharUtil.convertAndClearAll(str);
        System.out.print("\r\n直接转换convertTo:" + py1);
        System.out.print("\r\n保留一些字符convertAndClear:" + py2);
        System.out.print("\r\n仅保留字母和数字convertAndClearAll:" + py3);
    }
}




package pinyin;

/**
 * 汉字转首字母缩写
 * 
 * @author 张云飞vir基于网上获得的资料的修改2015-3-3 http://home.cnblogs.com/u/vir56k/
 *
 */
public class ChineseToFirstCharUtil {

    /**
     * 汉字转拼音缩写
     *
     * @param str
     *            要转换的汉字字符串
     * @return String 拼音缩写
     */
    public static String convertTo(String str) {
        String tempStr = "";
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            if (c >= 33 && c <= 126) {// 字母和符号原样保留
                tempStr += String.valueOf(c);
            } else {// 累加拼音声母
                tempStr += getPYChar(String.valueOf(c));
            }
        }
        return tempStr;
    }
    
    /**
     * 汉字转拼音缩写,清理无效字符(保留一些键盘字符)
     * @param str 汉字
     * @return String 缩写
     */
    public static String convertAndClear(String str) {
        return convertTo(str).replace("*", "");
    }

    /**
     * 汉字转拼音缩写,清理无效字符(清理任何非数字和字母)
     * @param str 汉字
     * @return String 缩写
     */
    public static String convertAndClearAll(String str) {
        String str1 =  convertTo(str).replace("*", "");
        StringBuilder sb = new StringBuilder();
        for(char c : str1.toCharArray()){
            if((c>=48 && c<= 57) || (c>=65 && c<= 90)   || (c>=97 && c<= 122)){
                sb.append(c);
            }
        }
        return sb.toString();
    }
    
    /**
     * 取单个字符的拼音声母
     *
     * @param c
     *            //要转换的单个汉字
     * @return String 拼音声母
     */
    private static String getPYChar(String c) {
        byte[] array = new byte[2];
        array = String.valueOf(c).getBytes();
        int i = (short) (array[0] - '\0' + 256) * 256
                + ((short) (array[1] - '\0' + 256));
        if (i < 0xB0A1)
            return "*";
        if (i < 0xB0C5)
            return "a";
        if (i < 0xB2C1)
            return "b";
        if (i < 0xB4EE)
            return "c";
        if (i < 0xB6EA)
            return "d";
        if (i < 0xB7A2)
            return "e";
        if (i < 0xB8C1)
            return "f";
        if (i < 0xB9FE)
            return "g";
        if (i < 0xBBF7)
            return "h";
        if (i < 0xBFA6)
            return "j";
        if (i < 0xC0AC)
            return "k";
        if (i < 0xC2E8)
            return "l";
        if (i < 0xC4C3)
            return "m";
        if (i < 0xC5B6)
            return "n";
        if (i < 0xC5BE)
            return "o";
        if (i < 0xC6DA)
            return "p";
        if (i < 0xC8BB)
            return "q";
        if (i < 0xC8F6)
            return "r";
        if (i < 0xCBFA)
            return "s";
        if (i < 0xCDDA)
            return "t";
        if (i < 0xCEF4)
            return "w";
        if (i < 0xD1B9)
            return "x";
        if (i < 0xD4D1)
            return "y";
        if (i < 0xD7FA)
            return "z";
        return "*";
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Android开发(12) 无线网络和GPRS连接

    启用gprs连接?难道说不是自动就调用网络了么?是呀,android 会默认调用当前的活动的网络. 那么什么是活动的网络呢? 看如下代码:

    zhangyunfeiVir
  • React 项目部署在 Nginx

    期望网址是:http://192.168.135.89/bbs_system_h5_dev

    zhangyunfeiVir
  • Android 开发 - 基于okhttp框架封装的开发框架oknet

    在android开发中经常要访问网络,目前最流行的网络访问框架就是Okhttp了,然而我们在具体使用时,往往仍然需要二次封装。我使用Builder设计模式进行了...

    zhangyunfeiVir
  • POJ1013 称硬币

    原题为POJ上的1013题,链接为:http://poj.org/problem?id=1013 代码如下:

    AI那点小事
  • dubbo路由代码分析3(condition路由器)

    这篇说说,dubbo condition类型路由器的路由解析和执行过程 由 https://cloud.tencent.com/developer/artic...

    wannshan
  • 项目工具类

    一、前言     在工作中,难免遇到各种各样的问题,每个人似乎都有一套自己的解决方案。而我,又不想每次解决完问题就把东西扔了,捡了芝麻,丢了西瓜,什么时候才能进...

    JMCui
  • APK安装流程详解14——PMS中的新安装流程上(拷贝)补充

    mContext.enforceCallingOrSelfPermission(android.Manifest.permission.INSTALL_PACK...

    隔壁老李头
  • MVC项目开发中那些用到的知识点(Jquery ajax提交Json后台处理)

      jQuery提供的ajax方法能很方便的实现客户端与服务器的异步交互,在asp.net mvc 框架使用jQuery能很方便地异步获取提交数据,给用户提供更...

    aehyok
  • Android 开发常用接口

    android常用接口 常见的一些调用接口 更多阅读全文后star,实时更、更新收集到的接口 dip转px public int convertDipO...

    用户1263308
  • MVC项目开发中那些用到的知识点(Jquery ajax提交Json后台处理)

      jQuery提供的ajax方法能很方便的实现客户端与服务器的异步交互,在asp.net mvc 框架使用jQuery能很方便地异步获取提交数据,给用户提供更...

    aehyok

扫码关注云+社区

领取腾讯云代金券