liuxiaolong
2019-05-06 a7bed6b4cfecd61ec153818945f982c5bb796b98
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
package com.cloud.common.utils;
import net.sourceforge.pinyin4j.PinyinHelper;
 
import java.io.UnsupportedEncodingException;
/**
 *
 * @author bsk
 * @date
 *
 */
public class UpperByName {
    private final static int[] LI_SEC_POS_VALUE = { 1601, 1637, 1833, 2078, 2274,
            2302, 2433, 2594, 2787, 3106, 3212, 3472, 3635, 3722, 3730, 3858,
            4027, 4086, 4390, 4558, 4684, 4925, 5249, 5590 };
    private final static String[] LC_FIRST_LETTER = { "a", "b", "c", "d", "e",
            "f", "g", "h", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s",
            "t", "w", "x", "y", "z" };
 
    /**
     * 取得给定汉字串的首字母串,即声母串
     * @param str 给定汉字串
     * @return 声母串
     */
    public String getAllFirstLetter(String str) {
        if (str == null || str.trim().length() == 0) {
            return "";
        }
 
        String tempStr = "";
        for (int i = 0; i < str.length(); i++) {
            tempStr = tempStr + this.getFirstLetter(str.substring(i, i + 1));
        }
 
        return tempStr;
    }
 
    /**
     * 取得给定汉字的首字母,即声母
     * @param chinese 给定的汉字
     * @return 给定汉字的声母
     */
    public String getFirstLetter(String chinese) {
        if (chinese == null || chinese.trim().length() == 0) {
            return "";
        }
        chinese = this.conversionStr(chinese, "GB2312", "ISO8859-1");
        int liSecPosCodeBefore = 5590;
        int liSecPosCodeAfter = 1600;
        int liSecPosCodeLength =23;
 
        // 判断是不是汉字
        if (chinese.length() > 1)
        {
            // 汉字区码
            int liSectorCode = (int) chinese.charAt(0);
            // 汉字位码
            int liPositionCode = (int) chinese.charAt(1);
            liSectorCode = liSectorCode - 160;
            liPositionCode = liPositionCode - 160;
            // 汉字区位码
            int liSecPosCode = liSectorCode * 100 + liPositionCode;
            if (liSecPosCode > liSecPosCodeAfter && liSecPosCode < liSecPosCodeBefore) {
                for (int i = 0; i < liSecPosCodeLength; i++) {
                    if (liSecPosCode >= LI_SEC_POS_VALUE[i]
                            && liSecPosCode < LI_SEC_POS_VALUE[i + 1]) {
                        chinese = LC_FIRST_LETTER[i];
                        break;
                    }
                }
            } else
            {
                // 非汉字字符,如图形符号或ASCII码
                chinese = this.conversionStr(chinese, "ISO8859-1", "GB2312");
                chinese = chinese.substring(0, 1);
            }
        }
 
        return chinese;
    }
 
    /**
     * 字符串编码转换
     * @param str 要转换编码的字符串
     * @param charsetName 原来的编码
     * @param toCharsetName 转换后的编码
     * @return 经过编码转换后的字符串
     */
    private String conversionStr(String str, String charsetName,String toCharsetName) {
        try {
            str = new String(str.getBytes(charsetName), toCharsetName);
        } catch (UnsupportedEncodingException ex) {
            System.out.println("字符串编码转换异常:" + ex.getMessage());
        }
        return str;
    }
 
    /**
     * 名字提取大写字母简写
     * @param name
     * @return
     */
    public String toUpperByName(String name){
        String convert = "";
        int len = name.length();
        for (int j = 0; j < len; j++) {
            char word = name.charAt(j);
            String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(word);
            if (pinyinArray != null) {
                convert += pinyinArray[0].charAt(0);
            } else {
                convert += word;
            }
        }
        return convert.toUpperCase();
    }
//    public String toUpperByName(String name){
//        String str = getAllFirstLetter(name);
//        StringBuffer sb = new StringBuffer();
//
//        if(str!=null){
//            for(int i=0;i<str.length();i++){
//                char c = str.charAt(i);
//                if(Character.isUpperCase(c)){
//                    sb.append(Character.toLowerCase(c));
//                }else if(Character.isLowerCase(c)){
//                    sb.append(Character.toUpperCase(c));
//                }
//            }
//        }return sb.toString();
//    }
 
    public static void main(String[] args) {
        UpperByName cte = new UpperByName();
        System.out.println("获取拼音首字母:"+ cte.toUpperByName("郑怡静"));
 
    }
 
 
 
}