汉字转换拼音,根据拼音的首字母分,在安卓通讯录中就应用的非常好。通讯录采用拼音的首字母排序分类,侧边栏可以根据字母检索快速跳转。如下图所示:
推荐一个转换工具:http://pinyin4j.sourceforge.net/
从这个网站下载 pinyin4j-2.5.0.jar 包,里面有很多介绍,可以很详细的了解。(也可以在这里下载:http://download.youkuaiyun.com/detail/q59521038/9278953)
注意:这个jar首次转换汉字时,会把转换的列表加载到内存,会造成内存一下子消耗很多,且第一次加载慢,后面就非常快,这个问题在开发时要注意,最好异步操作。
留下一个工具类代码,通过工具类代码就可以实现大部分你想要的功能:
/**
* @homepage http://pinyin4j.sourceforge.net/
*
* 拼音转换类
*/
public class PingYinUtil {
/**
* 将字符串中的中文转化为拼音,其他字符不变
*
* @param inputString
* @return
*/
public static String getPingYin(String inputString) {
HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
format.setVCharType(HanyuPinyinVCharType.WITH_V);
char[] input = inputString.trim().toCharArray();
String output = "";
try {
for (int i = 0; i < input.length; i++) {
if (java.lang.Character.toString(input[i]).matches(
"[\\u4E00-\\u9FA5]+")) {
String[] temp = PinyinHelper.toHanyuPinyinStringArray(
input[i], format);
output += temp[0];
} else
output += java.lang.Character.toString(input[i]);
}
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
return output;
}
/**
* char转成拼音
*
* @param c
* @return
*/
public static String getPingYin(char c) {
HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
format.setVCharType(HanyuPinyinVCharType.WITH_V);
String output = "";
try {
if (java.lang.Character.toString(c).matches("[\\u4E00-\\u9FA5]+")) {
String[] temp = PinyinHelper
.toHanyuPinyinStringArray(c, format);
output += temp[0];
} else
output += java.lang.Character.toString(c);
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
return output;
}
/**
* 首字是否是数字
* @param inputString
* @return
*/
public static boolean isNumber(String inputString) {
char[] input = inputString.trim().toCharArray();
if (java.lang.Character.toString(input[0]).matches("[0-9]")) {
return true;
}
return false;
}
/**
* 首字是否是字母
* @param inputString
* @return
*/
public static boolean isLetter(String inputString) {
char[] input = inputString.trim().toCharArray();
if (java.lang.Character.toString(input[0]).matches("[a-zA-Z]")) {
return true;
}
return false;
}
/**
* 首字是否是汉字
* @param inputString
* @return
*/
public static boolean isHanZi(String inputString) {
char[] input = inputString.trim().toCharArray();
if (java.lang.Character.toString(input[0]).matches("[\\u4E00-\\u9FA5]+")) {
return true;
}
return false;
}
/**
* char 是否是汉字
* @param c
* @return
*/
public static boolean isHanZi(char c) {
if (java.lang.Character.toString(c).matches("[\\u4E00-\\u9FA5]+")) {
return true;
}
return false;
}
/**
* 判断是字母
* @param str
* @return
*/
public static boolean isWord(String str)
{
Pattern pattern = Pattern.compile("^[A-Za-z]+$");
Matcher isNum = pattern.matcher(str);
if (!isNum.matches()) {
return false;
}
else {
return true;
}
}
/**
* 判断数字
*
* @param str
* @return
*/
public static boolean isNumeric(String str) {
Pattern pattern = Pattern.compile("^[0-9]*$");
Matcher isNum = pattern.matcher(str);
if (!isNum.matches()) {
return false;
} else {
return true;
}
}
/**
* 判断字母数字混合
*
* @param str
* @return
*/
public static boolean isAllWord(String str) {
Pattern pattern = Pattern.compile("^[A-Za-z0-9]+$");
Matcher isNum = pattern.matcher(str);
if (!isNum.matches()) {
return false;
} else {
return true;
}
}
/**
* 判断是汉字
*
* @param str
* @return
*/
public static boolean isAllHanZi(String str) {
Pattern pattern = Pattern.compile("[\\u4E00-\\u9FA5]");
Matcher isNum = pattern.matcher(str);
if (!isNum.matches()) {
return false;
} else {
return true;
}
}
/**
* 判断是特殊字符
*
* @param str
* @return
*/
public static boolean isAllTeShuZiFu(String str) {
// String regEx = "[`~!@#$%^&*()+=|{}':;',//[//].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?::¥]";
String regEx="[^A-Za-z0-9\\u4E00-\\u9FA5]";
Pattern pattern = Pattern.compile(regEx);
Matcher isNum = pattern.matcher(str);
if (!isNum.matches()) {
return false;
} else {
return true;
}
}
}