工具pinyin4j-2.5.0.jar
地址:http://pan.baidu.com/s/1bp7fo8v
整理了3个方法,
1.汉字转拼音
2. 返回中文姓 中文名 英文姓(last name) 英文名(First Name)
3.返回首字母
public class pinyin4jDemo {
// 将汉字转换为全拼
public static String getPingYin(String word) {
if (word == null || "".equals(word)) {
return "";
}
char[] hanzi = word.toCharArray();
String[] t2 = new String[hanzi.length];
HanyuPinyinOutputFormat t3 = new HanyuPinyinOutputFormat();
t3.setCaseType(HanyuPinyinCaseType.LOWERCASE);
t3.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
t3.setVCharType(HanyuPinyinVCharType.WITH_V);
String t4 = "";
try {
for (int i = 0; i < hanzi.length; i++) {
// 判断是否为汉字字符
if (Character.toString(hanzi[i]).matches(
"[\\u4E00-\\u9FA5]+")) {
t2 = PinyinHelper.toHanyuPinyinStringArray(hanzi[i], t3);
t4 += t2[0];
} else
t4 += Character.toString(hanzi[i]);
}
return t4;
} catch (BadHanyuPinyinOutputFormatCombination e1) {
e1.printStackTrace();
}
return t4;
}
//返回数组 4个参数 中文姓 中文名 英文姓(last name) 英文名(First Name)
//不考虑中英文混合,这里 默认采用 英文名的姓一般是在最后面
//如果单独给一个单词,那么默认处理成 名(First Name)
//3个汉字以上,前2个为姓
public static String[] getPingYin2(String word) {
if (word == null || "".equals(word)) {
return new String[]{"","","",""};
}
//去掉2边的空格
char[] hanzi = word.trim().toCharArray();
List<String> pinyinlist = new ArrayList<String>();
HanyuPinyinOutputFormat t3 = new HanyuPinyinOutputFormat();
t3.setCaseType(HanyuPinyinCaseType.LOWERCASE);
t3.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
t3.setVCharType(HanyuPinyinVCharType.WITH_V);
//存储英文单词的
List<String> englist=new ArrayList<String>();
String result[]=new String[4];
try {
for (int i = 0; i < hanzi.length; i++) {
// 判断是否为汉字字符
if (Character.toString(hanzi[i]).matches(
"[\\u4E00-\\u9FA5]+")) {
pinyinlist.add(PinyinHelper.toHanyuPinyinStringArray(hanzi[i], t3)[0]);
} else{
//否则为英文
if (word.contains(" ")) {
for(String s:word.split(" +")){
englist.add(s);
}
}else{
englist.add(word);
}
break;
}
}
// System.out.println(t4);
System.out.println("拼音---"+pinyinlist);
System.out.println("英文---"+englist);
//再进行姓和名的区分
int size=pinyinlist.size();
switch (size) {
//如果是英文名
case 0:
result[0]="";
result[1]="";
if (englist.size()==1) {
//只有一个单词,作为名
result[2]="";
result[3]=englist.get(0);
}
if (englist.size()>1) {
String temp="";
for (int i = 0; i < englist.size()-1; i++) {
temp+=englist.get(i)+" ";
}
//去掉2边空格
result[2]=englist.get(englist.size()-1);
result[3]=temp.trim();
}
break;
//一个中文字
case 1:
result[0]=String.valueOf(hanzi[0]);
result[1]="";
result[2]=pinyinlist.get(0).trim();
result[3]="";
break;
case 2:
result[0]=String.valueOf(hanzi[0]);
result[1]=String.valueOf(hanzi[1]);
result[2]=pinyinlist.get(0);
result[3]=pinyinlist.get(1);
break;
case 3:
result[0]=String.valueOf(hanzi[0]);
result[1]=String.valueOf(hanzi[1])+String.valueOf(hanzi[2]);
result[2]=pinyinlist.get(0);
result[3]=pinyinlist.get(1)+pinyinlist.get(2);
break;
//其他情况取2个字作为姓
default:
result[0]=String.valueOf(hanzi[0])+String.valueOf(hanzi[1]);
String temp="";
for (int i = 2; i < hanzi.length; i++) {
temp+=String.valueOf(hanzi[i]);
}
result[1]=temp;
result[2]=pinyinlist.get(0)+pinyinlist.get(1);
//清空temp
temp="";
for (int i = 2; i < pinyinlist.size(); i++) {
temp+=pinyinlist.get(i);
}
result[3]=temp;
break;
}
System.out.println("result===="+Arrays.toString(result));
return result;
} catch (BadHanyuPinyinOutputFormatCombination e1) {
e1.printStackTrace();
}
return result;
}
// 返回中文的首字母
public static String getPinYinHeadChar(String str) {
String convert = "";
for (int j = 0; j < str.length(); j++) {
char word = str.charAt(j);
String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(word);
if (pinyinArray != null) {
convert += pinyinArray[0].charAt(0);
} else {
convert += word;
}
}
return convert;
}
public static void main(String[] args) {
getPingYin2("nihao");
getPingYin2("marry Hhhh");
getPingYin2("marry Hhhh jj");
getPingYin2("");
getPingYin2("哈");
getPingYin2("你好");
getPingYin2("你好吗");
getPingYin2("上官高云");
getPingYin2("上官高云啊");
}
}