pinyin4J 是一个可以将汉字转换成拼音的lib,非常实用,其maven地址为:http://mvnrepository.com/artifact/com.belerweb/pinyin4j/2.5.0
pinyin4J 提供PinyinHelper这个静态类对外提供拼音转换的服务,主要有一下方法:
static public String[] toHanyuPinyinStringArray(char ch)
将char(必须为汉字单字)转化为拼音,实用的是通用的格式,如果ch为非汉字,返回null。
输入:重 输出:[zhong4, chong2]
说明重字有两个读音,拼音后面的1,2,3,4 代表的是读音
static public String[] toHanyuPinyinStringArray(char ch,HanyuPinyinOutputFormat outputFormat)
同上,但是这个方法可以设置输出的格式。HanyuPinyinOutputFormat 可以设置拼音大小写、是否后面加读音数字、特殊读音的显示方式,定义如下:
-
/**
-
* The option indicates that the output of 'ü' is "u:"
-
*/
-
public static final HanyuPinyinVCharType WITH_U_AND_COLON = new HanyuPinyinVCharType( "WITH_U_AND_COLON");
-
/**
-
* The option indicates that the output of 'ü' is "v"
-
*/
-
public static final HanyuPinyinVCharType WITH_V = new HanyuPinyinVCharType( "WITH_V")
-
/**
-
* The option indicates that the output of 'ü' is "ü" in Unicode form
-
*/
-
public static final HanyuPinyinVCharType WITH_U_UNICODE = new HanyuPinyinVCharType( "WITH_U_UNICODE");
-
static public String[] toTongyongPinyinStringArray( char ch) //转换为通用拼音
-
static public String[] toWadeGilesPinyinStringArray( char ch) //转换为威妥玛拼音
-
static public String[] toMPS2PinyinStringArray( char ch) //转换为注音符号拼音
-
static public String[] toYalePinyinStringArray( char ch) //转换为耶魯拼音
-
static public String[] toGwoyeuRomatzyhStringArray( char ch) //转换为国语罗马字
-
汉语拼音: [zhong4, chong2]
-
通用拼音: [jhong4, chong2]
-
威妥玛拼音: [chung4, ch`ung2]
-
注音符号拼音: [jung4, chung2]
-
耶魯拼音: [jung4, chung2]
-
国语罗马字: [jonq, chorng]
首先要将pinyin4j加入项目中,如果是maven项目,可以添加引用:
-
<dependency>
-
<groupId>com.belerweb </groupId>
-
<artifactId>pinyin4j </artifactId>
-
<version>2.5.0 </version>
-
</dependency>
然后编写工具类 PinyinTool.java:
-
package com.lyz.pingyin;
-
-
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;
-
-
-
/**
-
* 汉字转化为拼音的工具类
-
* @author liuyazhuang
-
*
-
*/
-
public class PinyinTool {
-
HanyuPinyinOutputFormat format = null;
-
public static enum Type {
-
UPPERCASE, //全部大写
-
LOWERCASE, //全部小写
-
FIRSTUPPER //首字母大写
-
}
-
-
public PinyinTool(){
-
format = new HanyuPinyinOutputFormat();
-
format.setCaseType(HanyuPinyinCaseType.UPPERCASE);
-
format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
-
}
-
-
public String toPinYin(String str) throws BadHanyuPinyinOutputFormatCombination{
-
return toPinYin(str, "", Type.UPPERCASE);
-
}
-
-
public String toPinYin(String str,String spera) throws BadHanyuPinyinOutputFormatCombination{
-
return toPinYin(str, spera, Type.UPPERCASE);
-
}
-
-
/**
-
* 将str转换成拼音,如果不是汉字或者没有对应的拼音,则不作转换
-
* 如: 明天 转换成 MINGTIAN
-
* @param str:要转化的汉字
-
* @param spera:转化结果的分割符
-
* @return
-
* @throws BadHanyuPinyinOutputFormatCombination
-
*/
-
public String toPinYin(String str, String spera, Type type) throws BadHanyuPinyinOutputFormatCombination {
-
if(str == null || str.trim().length()== 0)
-
return "";
-
if(type == Type.UPPERCASE)
-
format.setCaseType(HanyuPinyinCaseType.UPPERCASE);
-
else
-
format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
-
-
String py = "";
-
String temp = "";
-
String[] t;
-
for( int i= 0;i<str.length();i++){
-
char c = str.charAt(i);
-
if(( int)c <= 128)
-
py += c;
-
else{
-
t = PinyinHelper.toHanyuPinyinStringArray(c, format);
-
if(t == null)
-
py += c;
-
else{
-
temp = t[ 0];
-
if(type == Type.FIRSTUPPER)
-
temp = t[ 0].toUpperCase().charAt( 0)+temp.substring( 1);
-
py += temp+(i==str.length()- 1? "":spera);
-
}
-
}
-
}
-
return py.trim();
-
}
-
}
-
package com.lyz.pingyin.test;
-
-
import com.lyz.pingyin.PinyinTool;
-
import com.lyz.pingyin.PinyinTool.Type;
-
-
/**
-
* 测试拼音转化结果
-
* @author liuyazhuang
-
*
-
*/
-
public class PingyinToolTest {
-
public static void main(String[] args) throws Exception{
-
PinyinTool tool = new PinyinTool();
-
System.out.println( "刘亚壮的运行测试结果为====" + tool.toPinYin( "刘亚壮", "", Type.LOWERCASE));
-
}
-
}
刘亚壮的运行测试结果为====liuyazhuang