【JAVA】获取汉字拼音首字母

最近在做通讯录的时候,需要把姓转换为拼音字母

1-9 a-z A-Z 转换为#;借张微信的图大家感受下

网上的代码很多,不外乎两种

1:pinyin4java包太大

2:大部分不支持生僻字,比如“栾、鑫” 认不出

本方案解决了这个问题,就很简单一个helper类,注意,只是拼音首字母哦且编码格式为GBK!

代码很简单,就是在正常GBK检索不到的生僻字上,再加入一个字典,如果GBK检索不到,则在字典里找。

package zhexian.app.smartcall.Utils;

import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;

public class PinYinHelper {

    private static final int[] AREA_CODE = new int[]{
            45217, 45253, 45761, 46318, 46826, 47010, 47297, 47614, 48119, 48119, 49062,
            49324, 49896, 50371, 50614, 50622, 50906, 51387, 51446, 52218, 52698, 52698,
            52698, 52980, 53689, 54481
    };
    private static char[] initialTable = {‘A‘, ‘B‘, ‘C‘, ‘D‘, ‘E‘, ‘F‘, ‘G‘,
            ‘H‘, ‘i‘, ‘J‘, ‘K‘, ‘L‘, ‘M‘, ‘N‘, ‘O‘, ‘P‘, ‘Q‘, ‘R‘, ‘S‘, ‘T‘,
            ‘U‘, ‘V‘, ‘W‘, ‘X‘, ‘Y‘, ‘Z‘,};
    private static Map<Character, String> exceptWords = new HashMap();

    static {
        exceptWords.put(‘A‘, "庵鳌");
        exceptWords.put(‘B‘, "璧亳並侼別匂");
        exceptWords.put(‘C‘, "茌丞丒丳刅");
        exceptWords.put(‘D‘, "渎砀棣儋丟");
        exceptWords.put(‘F‘, "邡冹兝");
        exceptWords.put(‘G‘, "崮藁莞丐丱乢亁仠冮匃匄");
        exceptWords.put(‘H‘, "骅珲潢湟丆冴匢");
        exceptWords.put(‘J‘, "泾蛟暨缙旌莒鄄丌丩丮丯丼亅伋冏匊匛匞");
        exceptWords.put(‘K‘, "丂匟");
        exceptWords.put(‘L‘, "崂涞栾溧漯浏耒醴泸阆崃両刢劽啰");
        exceptWords.put(‘M‘, "渑汨丏冐冺兞冇");
        exceptWords.put(‘O‘, "瓯");
        exceptWords.put(‘P‘, "邳濮郫丕伂冸");
        exceptWords.put(‘Q‘, "喬綦衢岐朐邛丠丬亝冾兛匤");
        exceptWords.put(‘R‘, "榕刄");
        exceptWords.put(‘S‘, "泗睢沭嵊歙莘嵩鄯丄丗侺兙");
        exceptWords.put(‘T‘, "潼滕郯亣侹侻");
        exceptWords.put(‘W‘, "婺涠汶亾仼卍卐");
        exceptWords.put(‘X‘, "鑫盱浔荥淅浠亵丅伈兇");
        exceptWords.put(‘Y‘, "懿眙黟颍兖郓偃鄢晏丣亜伇偐円匜");
        exceptWords.put(‘Z‘, "梓涿诏柘秭圳伀冑刣");
    }

    public static String getPinYin(String str) {
        StringBuffer buffer = new StringBuffer(str.length());

        for (int i = 0; i < str.length(); i++) {
            buffer.append(getPinYin(str.charAt(i)));
        }
        return buffer.toString();
    }

    public static char getPinYin(char character) {

        if (character >= ‘A‘ && character <= ‘Z‘)
            return character;
        else if (character >= ‘a‘ && character <= ‘z‘)
            return (char) (character + 32);
        else if (character >= ‘0‘ && character <= ‘9‘)
            return ‘#‘;
        else {
            byte[] bytes;
            try {
                bytes = String.valueOf(character).getBytes("GBK");
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
                return ‘#‘;
            }

            int area = (short) bytes[0];
            int pos = (short) bytes[1];
            int code = (area << 8 & 0xff00) + (pos & 0xff);

            for (int i = 0; i < 26; i++) {
                int max = 55290;
                if (i != 25) {
                    max = AREA_CODE[i + 1];
                }
                if (AREA_CODE[i] <= code && code < max) {
                    return initialTable[i];
                }
            }

            for (Map.Entry<Character, String> letterSet : exceptWords.entrySet()) {
                if (letterSet.getValue().indexOf(character) != -1) {
                    return letterSet.getKey();
                }
            }
            return ‘#‘;
        }
    }
}
时间: 2024-12-05 05:17:26

【JAVA】获取汉字拼音首字母的相关文章

java获取汉字拼音首字母 --转载

在项目中要更能根据某些查询条件(比如姓名)的首字母作为条件进行查询,比如查一个叫"李晓明"的人,可以输入'lxm'.写了一个工具类如下: import java.io.UnsupportedEncodingException; /** * 取得给定汉字串的首字母串,即声母串 * Title: ChineseCharToEn * @date 2004-02-19 注:只支持GB2312字符集中的汉字 */ public final class ChineseCharToEn { priv

C# 获取汉字拼音首字母

最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精   本节探讨C#获取汉字拼音首字母的方法: 代码类东西,直接上代码: /// <summary> /// 在指定的字符串列表CnStr中检索符合拼音索引字符串 /// </summary> /// <param name="CnStr">汉字字符串</param> /// <returns&

ios/android获取汉字拼音首字母

android/ios开发如何获取汉字拼音的首字母? 提供的一个比较好的方案,是使用 c语言编写的一个算法,可以 在ios和 android.下面提供一个可以使用的代码,并且附上使用方法: /* * pinyin.c * Chinese Pinyin First Letter * * Created by George on 4/21/10. * Copyright 2010 RED/SAFI. All rights reserved. * */ #define HANZI_START 1996

php获取汉字拼音首字母的方法

现实中我们经常看到这样的说明,排名不分先后,按姓名首字母进行排序.这是中国人大多数使用的排序方法.那么在php程序中该如何操作呢? 下面就分享一下在php程序中获取汉字拼音的首字母的方法,在网上搜到的大多数是有问题的,这个可是经过小编实践应用过的,真的可以使用的哦. //php获取中文字符拼音首字母 function getFirstCharter($str){  if(empty($str)){return '';}  $fchar=ord($str{0});  if($fchar>=ord(

如何获取汉字拼音首字母?一般用于通讯录

- (NSString *)firstCharactor:(NSString *)aString { //转成了可变字符串 NSMutableString *str = [NSMutableString stringWithString:aString]; //先转换为带声调的拼音 CFStringTransform((CFMutableStringRef)str,NULL, kCFStringTransformMandarinLatin,NO); //再转换为不带声调的拼音 CFStringT

工作问题:如何获取汉字拼音首字母?一般用于通讯录建设

/* 程序员的目标是 征服星辰的大海~ */ - (NSString *)firstCharactor:(NSString *)aString { //转成了可变字符串 NSMutableString *str = [NSMutableString stringWithString:aString]; //先转换为带声调的拼音 CFStringTransform((CFMutableStringRef)str,NULL, kCFStringTransformMandarinLatin,NO);

C/C++ 获取汉字拼音首字母

1 #include <stdint.h> 2 #include <stdio.h> 3 #include <ctype.h> 4 #include <string.h> 5 6 bool between(uint32_t start,uint32_t end,uint32_t aim); 7 char get_first_letter(wchar_t wchar); 8 void get_first_letters(const char *szChines

php 获取汉字拼音首字母的函数

<?php header("content-type:text/html;charset=utf-8"); function getfirstchar($s0){ $firstchar_ord=ord(strtoupper($s0{0})); if (($firstchar_ord>=65 and $firstchar_ord<=91)or($firstchar_ord>=48 and $firstchar_ord<=57)) return $s0{0};

MySQL通过函数获取字符串汉字拼音首字母大写字符串

DELIMITER $$ DROP FUNCTION IF EXISTS `Fun_GetPY`$$ CREATE FUNCTION `HIS`.`Fun_GetPY` (in_string VARCHAR(21845)) RETURNS VARCHAR(21845) CHARSET utf8 BEGIN #截取字符串,每次做截取后的字符串存放在该变量中,初始为函数参数in_string值 DECLARE tmp_str VARCHAR(21845) CHARSET gbk DEFAULT ''