圖檔、視訊等資源檔案的指向位址在開發中一般不會出現漢字,而從易用性角度考慮,漢字給然的感覺是簡潔、直覺,是以,在開發中一般用漢字儲存資源名稱,而用拼音數字等表示資源位址,數字的區分度不如拼音。而在批量操作時,手動寫拼音對開發者來說無疑是一個天災,繁重的工作量不說,手誤從機率上将肯定是有的。
最近在做類似的項目,從網上搜了下相關的開源工具,其中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;
}
public staticString[] Exchange(String[][] strJaggedArray){
String[][] temp = DoExchange(strJaggedArray);
returntemp[0];
}
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;
}
}
}