汉字转拼音开源工具-pinyin4j
2013-07-15 20:05
253 查看
图片、视频等资源文件的指向地址在开发中一般不会出现汉字,而从易用性角度考虑,汉字给然的感觉是简洁、直观,因此,在开发中一般用汉字保存资源名称,而用拼音数字等表示资源地址,数字的区分度不如拼音。而在批量操作时,手动写拼音对开发者来说无疑是一个天灾,繁重的工作量不说,手误从概率上将肯定是有的。
最近在做类似的项目,从网上搜了下相关的开源工具,其中pinyin4j比较容易上手,主要通过PinyinHelper工具类来实现功能,
主要方法有:
1、 toHanyuPinyinStringArray(char,HanyuPinyinOutputFormat),
toHanyuPinyinStringArray(char)
将char(汉字)转为拼音,HanyuPinyinOutputFormat是拼音输出的格式设置,可以不用此参数。
下面是demo代码
public class PinYinTest {
public staticvoid main(String[]args){
File file= new File("E:/study-file/superboy");
for (FilefileIn : file.listFiles()) {
String fileName = fileIn.getName();
System.err.println(fileName);
System.err.println(getPinyin(fileName.substring(0,fileName.length()-4))+".jpg");
fileIn.renameTo(new File("E:/study-file/superboy/"+ getPinyin(fileName.substring(0,fileName.length()-4))+".jpg"));
}
}
public staticString getPinyin(String src){
if(src!=null &&!src.trim().equalsIgnoreCase("")){
char[] srcChar ;
srcChar=src.toCharArray();
//汉语拼音格式输出类
HanyuPinyinOutputFormat hanYuPinOutputFormat= new HanyuPinyinOutputFormat();
//输出设置,大小写,音标方式等
hanYuPinOutputFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
hanYuPinOutputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
hanYuPinOutputFormat.setVCharType(HanyuPinyinVCharType.WITH_V);
String[][] temp = newString[src.length()][];
for(int i=0;i<srcChar.length;i++){
char c = srcChar[i];
//是中文或者a-z或者A-Z转换拼音(我的需求,是保留中文或者a-z或者A-Z)
if(String.valueOf(c).matches("[\\u4E00-\\u9FA5]+")){
try{
temp[i] = PinyinHelper.toHanyuPinyinStringArray(srcChar[i],hanYuPinOutputFormat);
}catch(BadHanyuPinyinOutputFormatCombinatione) {
e.printStackTrace();
}
}else if(((int)c>=65 && (int)c<=90)|| ((int)c>=97 && (int)c<=122)){
temp[i] = new String[]{String.valueOf(srcChar[i])};
}else{
temp[i] = new String[]{""};
}
}
String[] pingyinArray = Exchange(temp);
Set<String> pinyinSet = newHashSet<String>();
for(int i=0;i<pingyinArray.length;i++){
pinyinSet.add(pingyinArray[i]);
}
return pinyinSet.toArray()[0].toString();
}
return null;
}
/**
* 递归
* @author wyh
* @paramstrJaggedArray
* @return
*/
public staticString[] Exchange(String[][] strJaggedArray){
String[][] temp = DoExchange(strJaggedArray);
returntemp[0];
}
/**
* 递归
* @authorwyh
* @paramstrJaggedArray
* @return
*/
private staticString[][] DoExchange(String[][] strJaggedArray){
intlen = strJaggedArray.length;
if(len>= 2){
intlen1 = strJaggedArray[0].length;
intlen2 = strJaggedArray[1].length;
intnewlen = len1*len2;
String[] temp = new String[newlen];
intIndex = 0;
for(inti=0;i<len1;i++){
for(int j=0;j<len2;j++){
temp[Index] = strJaggedArray[0][i] + strJaggedArray[1][j];
Index ++;
}
}
String[][] newArray = new String[len-1][];
for(inti=2;i<len;i++){
newArray[i-1] = strJaggedArray[i];
}
newArray[0] = temp;
returnDoExchange(newArray);
}else{
returnstrJaggedArray;
}
}
}
最近在做类似的项目,从网上搜了下相关的开源工具,其中pinyin4j比较容易上手,主要通过PinyinHelper工具类来实现功能,
主要方法有:
1、 toHanyuPinyinStringArray(char,HanyuPinyinOutputFormat),
toHanyuPinyinStringArray(char)
将char(汉字)转为拼音,HanyuPinyinOutputFormat是拼音输出的格式设置,可以不用此参数。
下面是demo代码
public class PinYinTest {
public staticvoid main(String[]args){
File file= new File("E:/study-file/superboy");
for (FilefileIn : file.listFiles()) {
String fileName = fileIn.getName();
System.err.println(fileName);
System.err.println(getPinyin(fileName.substring(0,fileName.length()-4))+".jpg");
fileIn.renameTo(new File("E:/study-file/superboy/"+ getPinyin(fileName.substring(0,fileName.length()-4))+".jpg"));
}
}
public staticString getPinyin(String src){
if(src!=null &&!src.trim().equalsIgnoreCase("")){
char[] srcChar ;
srcChar=src.toCharArray();
//汉语拼音格式输出类
HanyuPinyinOutputFormat hanYuPinOutputFormat= new HanyuPinyinOutputFormat();
//输出设置,大小写,音标方式等
hanYuPinOutputFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
hanYuPinOutputFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
hanYuPinOutputFormat.setVCharType(HanyuPinyinVCharType.WITH_V);
String[][] temp = newString[src.length()][];
for(int i=0;i<srcChar.length;i++){
char c = srcChar[i];
//是中文或者a-z或者A-Z转换拼音(我的需求,是保留中文或者a-z或者A-Z)
if(String.valueOf(c).matches("[\\u4E00-\\u9FA5]+")){
try{
temp[i] = PinyinHelper.toHanyuPinyinStringArray(srcChar[i],hanYuPinOutputFormat);
}catch(BadHanyuPinyinOutputFormatCombinatione) {
e.printStackTrace();
}
}else if(((int)c>=65 && (int)c<=90)|| ((int)c>=97 && (int)c<=122)){
temp[i] = new String[]{String.valueOf(srcChar[i])};
}else{
temp[i] = new String[]{""};
}
}
String[] pingyinArray = Exchange(temp);
Set<String> pinyinSet = newHashSet<String>();
for(int i=0;i<pingyinArray.length;i++){
pinyinSet.add(pingyinArray[i]);
}
return pinyinSet.toArray()[0].toString();
}
return null;
}
/**
* 递归
* @author wyh
* @paramstrJaggedArray
* @return
*/
public staticString[] Exchange(String[][] strJaggedArray){
String[][] temp = DoExchange(strJaggedArray);
returntemp[0];
}
/**
* 递归
* @authorwyh
* @paramstrJaggedArray
* @return
*/
private staticString[][] DoExchange(String[][] strJaggedArray){
intlen = strJaggedArray.length;
if(len>= 2){
intlen1 = strJaggedArray[0].length;
intlen2 = strJaggedArray[1].length;
intnewlen = len1*len2;
String[] temp = new String[newlen];
intIndex = 0;
for(inti=0;i<len1;i++){
for(int j=0;j<len2;j++){
temp[Index] = strJaggedArray[0][i] + strJaggedArray[1][j];
Index ++;
}
}
String[][] newArray = new String[len-1][];
for(inti=2;i<len;i++){
newArray[i-1] = strJaggedArray[i];
}
newArray[0] = temp;
returnDoExchange(newArray);
}else{
returnstrJaggedArray;
}
}
}
相关文章推荐
- 汉字转拼音Pinyin4j工具(C#、Java都可用)
- 汉字转拼音,TinyPinyin、Pinyin4j与JPinyin哪个库更快
- Java下将汉字转换为拼音的包pinyin4j
- 几个将汉字转换成拼音的在线工具
- Java下将汉字转换为拼音的包pinyin4j
- Java下将汉字转换为拼音的包pinyin4j
- java 使用sourceforge.pinyin4j查询汉字拼音
- 汉字转拼音Pinyin4j的基本用法
- 使用pinyin4j将TreeMap按照key的汉字拼音排序
- java 使用sourceforge.pinyin4j查询汉字拼音
- 通过pinyin4j将汉字转换为全拼 和 拼音首字母
- Java下将汉字转换为拼音的包pinyin4j
- java中常用的工具类(二)FtpUtil, 汉字转拼音,zip工具类,CollectionUtil,MathUtil,
- Java汉字转拼音pinyin4j用法
- 一个汉字转拼音的插件(pinyin4j)
- Java下将汉字转换为拼音的包pinyin4j
- Java下将汉字转换为拼音的包pinyin4j
- 汉字转换拼音开源项目
- 909422229_汉字转拼音工具:JPinyinUtils
- java字符操作获取汉字的拼音以及其它经常使用工具