Last active
January 15, 2021 12:07
-
-
Save tqcenglish/4ed6516007b76821bc00 to your computer and use it in GitHub Desktop.
Java汉字拼音首字母提取
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.zycoo.android.sip.util; | |
import java.io.UnsupportedEncodingException; | |
/** | |
* 取得给定汉字串的首字母串,即声母串 Title: ChineseCharToEn | |
* | |
* {@link http://blog.csdn.net/fei1502816/article/details/8446049} | |
* | |
* @date 2004-02-19 注:只支持GB2312字符集中的汉字 | |
* | |
*/ | |
public final class ChineseCharToEn | |
{ | |
private static class SingletonClassInstance { | |
private static final ChineseCharToEn instance = new ChineseCharToEn(); | |
} | |
public static ChineseCharToEn getInstance() { | |
return SingletonClassInstance.instance; | |
} | |
private ChineseCharToEn() { | |
} | |
private final static int[] li_SecPosValue = | |
{ 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_FirstLetter = | |
{ "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 _str = ""; | |
for (int i = 0; i < str.length(); i++) | |
{ | |
_str = _str + this.getFirstLetter(str.substring(i, i + 1)); | |
} | |
return _str; | |
} | |
/** | |
* 取得给定汉字的首字母,即声母 | |
* | |
* @param chinese 给定的汉字 | |
* @return 给定汉字的声母 | |
*/ | |
public String getFirstLetter(String chinese) | |
{ | |
if (chinese == null || chinese.trim().length() == 0) | |
{ | |
return ""; | |
} | |
chinese = this.conversionStr(chinese, "GB2312", "ISO8859-1"); | |
if (chinese.length() > 1) // 判断是不是汉字 | |
{ | |
int li_SectorCode = (int) chinese.charAt(0); // 汉字区码 | |
int li_PositionCode = (int) chinese.charAt(1); // 汉字位码 | |
li_SectorCode = li_SectorCode - 160; | |
li_PositionCode = li_PositionCode - 160; | |
int li_SecPosCode = li_SectorCode * 100 + li_PositionCode; // 汉字区位码 | |
if (li_SecPosCode > 1600 && li_SecPosCode < 5590) | |
{ | |
for (int i = 0; i < 23; i++) | |
{ | |
if (li_SecPosCode >= li_SecPosValue[i] | |
&& li_SecPosCode < li_SecPosValue[i + 1]) | |
{ | |
chinese = lc_FirstLetter[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; | |
} | |
public static void main(String[] args) | |
{ | |
ChineseCharToEn cte = new ChineseCharToEn(); | |
System.out.println("获取拼音首字母:" + cte.getAllFirstLetter("这是测试")); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment