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 org.apache.commons.lang3.StringUtils;
/**
* 拼音工具类
*
* @author ZhuLei
* @date 2016年11月14日
*/
public class PinYinUtils {
public static enum Type {
UPPERCASE, // 全部大写
LOWERCASE, // 全部小写
FIRSTUPPER // 首字母大写
}
/**
* 获取姓名首字母,英文字符不变
*
* @author ZhuLei,2016年11月14日上午10:09:32
* @param chinese
* 汉字串
* @param caseType
* 大小写类型
* @return 汉语拼音首字母
*/
public static String getNameFirstSpell(String chinese, Type caseType) {
StringBuffer pybf = new StringBuffer();
char[] arr = chinese.toCharArray();
HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
if (caseType == Type.UPPERCASE) {
defaultFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE);
} else {
defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
}
defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
for (int i = 0; i < arr.length; i++) {
if (arr[i] > 128) {
try {
// 多音字
String d_y_z = DuoYinZiUtil.get(arr[i]);
String[] temp = PinyinHelper.toHanyuPinyinStringArray(
arr[i], defaultFormat);
if (temp != null) {
if (StringUtils.isNotEmpty(d_y_z)) {
d_y_z = d_y_z.toUpperCase();
for (String t : temp) {
String tu = t.toUpperCase();
if (d_y_z.equals(tu)) {
pybf.append(t.charAt(0));
break;
}
}
} else {
pybf.append(temp[0].charAt(0));
}
break;
}
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
} else {
if (arr[i] > 'A' && arr[i] < 'z') {
pybf.append(arr[i]);
break;
}
}
}
String result = "";
if (caseType == Type.UPPERCASE) {
result = pybf.toString().toUpperCase();
} else {
result = pybf.toString().toLowerCase();
}
return result.replaceAll("\\W", "").trim();
}
/**
* 获取姓名全拼,英文字符不变
*
* @author ZhuLei,2016年11月14日上午10:09:19
* @param chinese
* 汉字串
* @param splitStr
* 分隔符
* @param caseType
* 大小写类型
* @return 汉语拼音首字母
*/
public static String getNameAllSpell(String chinese, String splitStr,
Type caseType) {
StringBuffer pybf = new StringBuffer();
char[] arr = chinese.toCharArray();
HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
if (caseType == Type.UPPERCASE) {
defaultFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE);
} else {
defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
}
defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
for (int i = 0; i < arr.length; i++) {
if (arr[i] > 128) {
try {
// 多音字
String d_y_z = DuoYinZiUtil.get(arr[i]);
String[] temp = PinyinHelper.toHanyuPinyinStringArray(
arr[i], defaultFormat);
if (temp != null) {
if (i > 0) {
pybf.append(splitStr);
}
if (StringUtils.isNotEmpty(d_y_z)) {
d_y_z = d_y_z.toUpperCase();
for (String t : temp) {
String tu = t.toUpperCase();
if (d_y_z.equals(tu)) {
if (caseType == Type.FIRSTUPPER) {
t = t.toUpperCase().charAt(0)
+ t.substring(1);
}
pybf.append(t);
break;
}
}
} else {
String t = temp[0];
if (caseType == Type.FIRSTUPPER) {
t = temp[0].toUpperCase().charAt(0)
+ t.substring(1);
}
pybf.append(t);
}
}
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
} else {
pybf.append(arr[i]);
}
}
return pybf.toString().trim();
}
/**
* 获取首字母,英文字符不变
*
* @author Xushuai,2016年11月16日 下午5:38:19
* @param chinese
* @param caseType
* @return
*/
public static String getFirstSpell(String chinese, Type caseType) {
StringBuffer pybf = new StringBuffer();
char[] arr = chinese.toCharArray();
HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
if (caseType == Type.UPPERCASE) {
defaultFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE);
} else {
defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
}
defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
for (int i = 0; i < arr.length; i++) {
if (arr[i] > 128) {
try {
String[] temp = PinyinHelper.toHanyuPinyinStringArray(
arr[i], defaultFormat);
if (temp != null) {
pybf.append(temp[0].charAt(0));
break;
}
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
} else {
if (arr[i] > 'A' && arr[i] < 'z') {
pybf.append(arr[i]);
break;
}
}
}
String result = "";
if (caseType == Type.UPPERCASE) {
result = pybf.toString().toUpperCase();
} else {
result = pybf.toString().toLowerCase();
}
return result.replaceAll("\\W", "").trim();
}
/**
* 获取全拼,英文字符不变
*
* @author Xushuai,2016年11月16日 下午5:40:11
* @param chinese
* @param splitStr
* @param caseType
* @return
*/
public static String getAllSpell(String chinese, String splitStr,
Type caseType) {
StringBuffer pybf = new StringBuffer();
char[] arr = chinese.toCharArray();
HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
if (caseType == Type.UPPERCASE) {
defaultFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE);
} else {
defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
}
defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
for (int i = 0; i < arr.length; i++) {
if (arr[i] > 128) {
try {
String[] temp = PinyinHelper.toHanyuPinyinStringArray(
arr[i], defaultFormat);
if (temp != null) {
if (i > 0) {
pybf.append(splitStr);
}
String t = temp[0];
if (caseType == Type.FIRSTUPPER) {
t = temp[0].toUpperCase().charAt(0)
+ t.substring(1);
}
pybf.append(t);
}
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
} else {
pybf.append(arr[i]);
}
}
return pybf.toString().trim();
}
/**
* 测试main方法
*
* @author ZhuLei,2016年11月14日上午10:40:45
* @param args
*/
public static void main(String[] args) {
// 只取姓名首字母大写
System.out.println(getNameFirstSpell("单棉麻", Type.UPPERCASE));
// 只取姓名首字母小写
System.out.println(getNameFirstSpell("单棉麻", Type.LOWERCASE));
// 全拼姓名大写
System.out.println(getNameAllSpell("单棉麻", "-", Type.UPPERCASE));
// 全拼姓名小写
System.out.println(getNameAllSpell("单棉麻", "-", Type.LOWERCASE));
// 全拼姓名首字母大写
System.out.println(getNameAllSpell("单棉麻", "-", Type.FIRSTUPPER));
// 只取首字母大写
System.out.println(getFirstSpell("单棉麻", Type.UPPERCASE));
// 只取首字母小写
System.out.println(getFirstSpell("单棉麻", Type.LOWERCASE));
// 全拼大写
System.out.println(getAllSpell("单棉麻", "-", Type.UPPERCASE));
// 全拼小写
System.out.println(getAllSpell("单棉麻", "-", Type.LOWERCASE));
// 全拼首字母大写
System.out.println(getAllSpell("单棉麻", "-", Type.FIRSTUPPER));
}
}
拼音工具类
最新推荐文章于 2023-06-06 23:18:36 发布