您的位置:首页 > 其它

汉字转拼音开源工具-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;

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: