package com.yunmall.framework.core.util;
import java.io.UnsupportedEncodingException;
import com.yunmall.framework.core.log.LogTrace;
/**
* 拼音转换类
*
* @version 1.0
* @createDate 2012-8-8
* @modifyDate 2012-8-14
*/
public class CnToSpellUtil {
private static final LogTrace log = new LogTrace("CnToSpellUtil");
private CnToSpellUtil() {
}
/**
* 将字符串转换为拼音
*
* @param cnStr
* 要转换的内容
* @return 拼音
*/
public static String toSpell(String cnStr) {
if (StringUtil.isEmpty(cnStr)) {
return cnStr;
}
char[] chars = cnStr.toCharArray();
StringBuffer retuBuf = new StringBuffer();
for (int i = 0, len = chars.length; i < len; i++) {
String ascii = getCnAscii(chars[i]);
if (ascii.length() == 0) {
retuBuf.append(chars[i]);
} else {
String spell = getSpellByAscii(ascii);
if (spell == null) {
char firstChar = chars[i];
if ((firstChar >= 48 && firstChar <= 57)
|| (firstChar >= 65 && firstChar <= 90)
|| (firstChar >= 97 && firstChar <= 122)) {
retuBuf.append(firstChar);
}
} else {
retuBuf.append(spell);
}
}
}
return retuBuf.toString();
}
/**
* 将每个分词的首字符转换为拼音
*
* @param cnStr
* 要转换的内容
* @return 各分词首字母拼音
*/
public static String getFirstSpell(String cnStr) {
if (StringUtil.isEmpty(cnStr)) {
return cnStr;
}
char[] chars = cnStr.toCharArray();
StringBuffer retuBuf = new StringBuffer();
for (int i = 0, len = chars.length; i < len; i++) {
String ascii = getCnAscii(chars[i]);
char firstChar;
if (ascii.length() == 1) {
firstChar = chars[i];
} else {
String spell = getSpellByAscii(ascii);
if (spell == null || "".equals(cnStr.trim())) {
firstChar = chars[i];
} else {
try {
firstChar = spell.charAt(0);
} catch (Exception e) {
firstChar = " ".toCharArray()[0];
log.error(e.getMessage());
}
}
}
if ((firstChar >= 48 && firstChar <= 57) || (firstChar >= 65 && firstChar <= 90)
|| (firstChar >= 97 && firstChar <= 122)) {
retuBuf.append(firstChar);
}
}
return retuBuf.toString();
}
/**
* 将字符串的首字母转换为拼音
*
* @param cnStr
* 要转换的内容
* @return 首字母拼音
*/
public static String getFirstWordSpell(String cnStr) {
if (StringUtil.isEmpty(cnStr)) {
return cnStr;
}
char[] chars = cnStr.toCharArray();
for (int i = 0, len = chars.length; i < len; i++) {
String ascii = getCnAscii(chars[i]);
if (ascii.length() == 1) {
return ascii;
} else {
String spell = getSpellByAscii(ascii);
if (spell == null || "".equals(cnStr.trim())) {
continue;
} else {
return String.valueOf(spell.charAt(0));
}
}
}
return "";
}
private static String getCnAscii(char cn) {
byte[] bytes;
try {
bytes = (String.valueOf(cn)).getBytes("GBK");
if (bytes == null || bytes.length > 2 || bytes.length <= 0) {
return "";
}
if (bytes.length == 1) {
return new String(bytes);
}
if (bytes.length == 2) {
int hightByte = 256 + bytes[0];
int lowByte = 256 + bytes[1];
String ascii = hightByte + "-" + lowByte;
return ascii;
}
} catch (UnsupportedEncodingException e) {
return "";
}
return "";
}
private static String getSpellByAscii(String ascii) {
if (ascii.indexOf("-") > -1) {
return (String) CnAsciiLib.spellMap.get(ascii);
} else {
return ascii;
}
}
}