146 lines
4.3 KiB
Plaintext
Executable File
146 lines
4.3 KiB
Plaintext
Executable File
package com.example.administrator.ximengjianyu.utils;
|
|
|
|
import net.sourceforge.pinyin4j.PinyinHelper;
|
|
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
|
|
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
|
|
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
|
|
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
|
|
|
|
import java.util.regex.Matcher;
|
|
import java.util.regex.Pattern;
|
|
|
|
/**
|
|
* Created by xukai on 2017/1/6.
|
|
*/
|
|
public class PinYinUtils {
|
|
|
|
/**
|
|
* 根据指定的汉字字符串, 返回其对应的拼音
|
|
* @param string
|
|
* @return
|
|
*/
|
|
public static String getDaxiePinyin(String string) {
|
|
HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
|
|
// 不需要音标
|
|
format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
|
|
// 设置转换出小写字母
|
|
format.setCaseType(HanyuPinyinCaseType.UPPERCASE);
|
|
|
|
char[] charArray = string.toCharArray();
|
|
|
|
StringBuilder sb = new StringBuilder();
|
|
|
|
for (int i = 0; i < charArray.length; i++) {
|
|
char c = charArray[i];
|
|
|
|
// 如果是空格, 跳过当前循环
|
|
if(Character.isWhitespace(c)){
|
|
continue;
|
|
}
|
|
|
|
if(c >= -128 && c < 127){
|
|
// 不可能是汉字, 直接拼接
|
|
sb.append(c);
|
|
}else {
|
|
try {
|
|
// 获取某个字符对应的拼音. 可以获取到多音字. 单 ->DAN, SHAN
|
|
String s = PinyinHelper.toHanyuPinyinStringArray(c, format)[0]; //返回字符串数字,因为可能是多音字,就取第一个读音
|
|
sb.append(s);
|
|
} catch (BadHanyuPinyinOutputFormatCombination e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
return sb.toString();
|
|
}
|
|
|
|
/**
|
|
* 判断是否为中文
|
|
* @param str
|
|
* @return
|
|
*/
|
|
public static boolean isChinese(String str){
|
|
Pattern p= Pattern.compile("^[\u4e00-\u9fa5]*$");
|
|
Matcher m=p.matcher(str);
|
|
if(m.matches()){
|
|
return true;
|
|
}else{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 判断是否包含中文
|
|
* @param str
|
|
* @return
|
|
*/
|
|
public static boolean isContainChinese(String str){
|
|
Pattern p = Pattern.compile("[\u4e00-\u9fa5]");
|
|
Matcher m = p.matcher(str);
|
|
if (m.find()) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* 判断是否为字母
|
|
* @param fstrData
|
|
* @return
|
|
*/
|
|
public static boolean isEnglish(String fstrData){
|
|
char c = fstrData.charAt(0);
|
|
if(((c>='a'&&c<='z')||(c>='A'&&c<='Z'))){
|
|
return true;
|
|
}else{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* 根据指定的汉字字符串, 返回其对应的拼音
|
|
* @param string
|
|
* @return
|
|
*/
|
|
public static String getPinyin(String string) {
|
|
HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
|
|
// 不需要音标
|
|
format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
|
|
// 设置转换出小写字母
|
|
format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
|
|
|
|
char[] charArray = string.toCharArray();
|
|
|
|
StringBuilder sb = new StringBuilder();
|
|
|
|
for (int i = 0; i < charArray.length; i++) {
|
|
char c = charArray[i];
|
|
|
|
// 如果是空格, 跳过当前循环
|
|
if(Character.isWhitespace(c)){
|
|
continue;
|
|
}
|
|
|
|
if(c >= -128 && c < 127){
|
|
// 不可能是汉字, 直接拼接
|
|
sb.append(c);
|
|
}else {
|
|
try {
|
|
// 获取某个字符对应的拼音. 可以获取到多音字. 单 ->DAN, SHAN
|
|
String s = PinyinHelper.toHanyuPinyinStringArray(c, format)[0]; //返回字符串数字,因为可能是多音字,就取第一个读音
|
|
sb.append(s);
|
|
} catch (BadHanyuPinyinOutputFormatCombination e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
return sb.toString();
|
|
}
|
|
|
|
}
|