概述
工作中經常會遇到的一些排序問題,比如 按漢字的拼音首字母排序,比如人名排序等,就要用到下面的方法了,思路:
1.獲得漢字
2.将漢字轉換成首字母,并記錄下(必要時儲存到資料庫)
3.按首字母進行排序并展示
示範
控制台輸出示範:
漢字轉首字母示範,請輸入漢字: 4654*&&^_FDSF你i好3啊>?>?>(*33P{}{
直接轉換convertTo: 4654*&&^_FDSFnih3a>?>?>(*33P{}{
保留一些字元convertAndClear: 4654&&^_FDSFnih3a>?>?>(33P{}{
僅保留字母和數字convertAndClearAll: 4654FDSFnih3a33P
實作
代碼如下,直接複制後就能使用:
package pinyin;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("漢字轉首字母示範,請輸入漢字:");
String str = sc.next();
String py1 = ChineseToFirstCharUtil.convertTo(str);
String py2 = ChineseToFirstCharUtil.convertAndClear(str);
String py3 = ChineseToFirstCharUtil.convertAndClearAll(str);
System.out.print("\r\n直接轉換convertTo:" + py1);
System.out.print("\r\n保留一些字元convertAndClear:" + py2);
System.out.print("\r\n僅保留字母和數字convertAndClearAll:" + py3);
}
}
package pinyin;
/**
* 漢字轉首字母縮寫
*
* @author 張雲飛vir基于網上獲得的資料的修改2015-3-3 http://home.cnblogs.com/u/vir56k/
*
*/
public class ChineseToFirstCharUtil {
/**
* 漢字轉拼音縮寫
*
* @param str
* 要轉換的漢字字元串
* @return String 拼音縮寫
*/
public static String convertTo(String str) {
String tempStr = "";
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (c >= 33 && c <= 126) {// 字母和符号原樣保留
tempStr += String.valueOf(c);
} else {// 累加拼音聲母
tempStr += getPYChar(String.valueOf(c));
}
}
return tempStr;
}
/**
* 漢字轉拼音縮寫,清理無效字元(保留一些鍵盤字元)
* @param str 漢字
* @return String 縮寫
*/
public static String convertAndClear(String str) {
return convertTo(str).replace("*", "");
}
/**
* 漢字轉拼音縮寫,清理無效字元(清理任何非數字和字母)
* @param str 漢字
* @return String 縮寫
*/
public static String convertAndClearAll(String str) {
String str1 = convertTo(str).replace("*", "");
StringBuilder sb = new StringBuilder();
for(char c : str1.toCharArray()){
if((c>=48 && c<= 57) || (c>=65 && c<= 90) || (c>=97 && c<= 122)){
sb.append(c);
}
}
return sb.toString();
}
/**
* 取單個字元的拼音聲母
*
* @param c
* //要轉換的單個漢字
* @return String 拼音聲母
*/
private static String getPYChar(String c) {
byte[] array = new byte[2];
array = String.valueOf(c).getBytes();
int i = (short) (array[0] - '\0' + 256) * 256
+ ((short) (array[1] - '\0' + 256));
if (i < 0xB0A1)
return "*";
if (i < 0xB0C5)
return "a";
if (i < 0xB2C1)
return "b";
if (i < 0xB4EE)
return "c";
if (i < 0xB6EA)
return "d";
if (i < 0xB7A2)
return "e";
if (i < 0xB8C1)
return "f";
if (i < 0xB9FE)
return "g";
if (i < 0xBBF7)
return "h";
if (i < 0xBFA6)
return "j";
if (i < 0xC0AC)
return "k";
if (i < 0xC2E8)
return "l";
if (i < 0xC4C3)
return "m";
if (i < 0xC5B6)
return "n";
if (i < 0xC5BE)
return "o";
if (i < 0xC6DA)
return "p";
if (i < 0xC8BB)
return "q";
if (i < 0xC8F6)
return "r";
if (i < 0xCBFA)
return "s";
if (i < 0xCDDA)
return "t";
if (i < 0xCEF4)
return "w";
if (i < 0xD1B9)
return "x";
if (i < 0xD4D1)
return "y";
if (i < 0xD7FA)
return "z";
return "*";
}
}
複制