1.工具包
pinyin4j-2.5.0.jar
2.工具类,其中包含方法:
(1)getPingYin---用来获取汉字的汉语拼音,英文以及符号不变 多音字多为常用的拼音,无法具体识别
(2)getFirstSpell---获取汉字的首首个字母,英文不变,中文符号不允许出现
(3)getFullSpell---将汉字变成汉语拼音,英文不变,不允许出现中文符号
(4)toDBC--- 将某些中文标点符号变为英文标点符号
(5)firstWordToUp---将英文语句每个单词首字母变大写
(6)changePingYin---把一段汉字变成汉语拼音式的语句
代码如下:
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;
}
/**
* 获取汉字的首首个字母,英文不变,中文符号不允许出现
*
* @param chinese
* @return
*/
public static String getFirstSpell(String chinese) {
StringBuffer pybf = new StringBuffer();
char[] arr = chinese.toCharArray();
HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
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));
} else {
System.out.println("出现非法字符");
}
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
} else {
pybf.append(arr[i]);
}
}
// 用于去除除单词字符的所有其他字符
return pybf.toString().replaceAll("\\W", "").trim();// 正则表达式表示匹配任何非单词字符。等价于“[^A-Za-z0-9_]”
}
/**
* 将汉字变成汉语拼音,英文不变,不允许出现中文符号
*
* @param chinese
* @return
*/
public static String getFullSpell(String chinese) {
StringBuffer pybf = new StringBuffer();
char[] arr = chinese.toCharArray();
HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
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]);
} else {
pybf.append(arr[i]);// 不过滤非法字符
System.out.println("出现非法字符");
}
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
} else {
pybf.append(arr[i]);
}
}
return pybf.toString();
}
/**
* 将某些中文标点符号变为英文标点符号
*/
public static String toDBC(String input) {
char[] c = input.toCharArray();
for (int i = 0; i < c.length; i++) {
if (c[i] == 12288) {
c[i] = (char) 32;
continue;
}
if (c[i] > 65280 && c[i] < 65375)
c[i] = (char) (c[i] - 65248);
}
return new String(c);
}
/**
*将英文语句每个单词首字母变大写
*
*/
public static String firstWordToUp(String input) {
StringBuffer pybf = new StringBuffer();
char[] arr = input.toCharArray();
boolean flag=false;
for (int i = 0; i < arr.length; i++) {
if (arr[i] < 128) {// 用于判断是不是键盘上的单个字符
String temp = Character.toString(arr[i]);
if (i != 0) {
if (temp!=null) {
if(!flag){
if(temp.equals("!")||temp.equals(".")||temp.equals("?")){
flag=true;
pybf.append(temp);
}else
pybf.append(temp);
}else{
pybf.append(temp.toUpperCase());
flag=false;
}
}else{
System.out.println("包含非法字符");
}
}else{
pybf.append(temp.toUpperCase());
}
} else {
System.out.println("包含非法字符!");
}
}
return pybf.toString();
}
/**
* 把一段话变成汉语拼音式的语句
*
* @param inputString
* @return
*/
public static String changePingYin(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++) {
String code=java.lang.Character.toString(input[i]);
if (code.matches("[\\u4E00-\\u9FA5]+")) {// 正则表达式,代表至少匹配一个到汉字
String[] temp = PinyinHelper.toHanyuPinyinStringArray(input[i], format);// 匹配到汉字就将其变成拼音并拼接
output += temp[0];
output +=" ";
} else if(code.equals("!")||code.equals("!")||code.equals(".")||code.equals("。")||code.equals("?")||code.equals("?")||code.equals(",")||code.equals(","))
output += java.lang.Character.toString(input[i]);
}
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
return output;
}
3.工具类有些地方不完善,很多地方写的也不严谨,有网上查阅的,也有自己编写的,标点符号转换的时候,由于句号不能实现,个人觉得多加个判断应该就可以了,汉语拼音化那里,标点前多了个空格,应该也需要多个判断,自己懒得写了,也没有考虑其他标点符号的情况,总之,很多地方不完善啦,主要最近公司没有事做,随便写写,理理自己的逻辑判断能力,也温习一下基本的方法,以后也算做个参考吧*-*