Java編程完成中英混雜字符串數組按首字母排序的辦法。本站提示廣大學習愛好者:(Java編程完成中英混雜字符串數組按首字母排序的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是Java編程完成中英混雜字符串數組按首字母排序的辦法正文
本文實例講述了Java編程完成中英混雜字符串數組按首字母排序的辦法。分享給年夜家供年夜家參考,詳細以下:
在Java中關於字符串數組的排序,我們可使用Arrays.sort(String[])辦法很便捷的停止排序。例如:
String[] arrays = new String[] { "gyu", "sdf", "zf", "年夜同", "收到", "處所", "三等分", "的人", "否決高鐵", "泛代數", "上的投入", "和國度" };
/*設置說話情況*/
Comparator<Object> com = Collator.getInstance(java.util.Locale.CHINA);
Arrays.sort(arrays, com);
for (String item:arrays) {
System.out.print(item+" ");
}
輸入的成果為:“gyu sdf zf 年夜同 的人 處所 否決高鐵 泛代數 和國度 三等分 上的投入 收到”;在Java中分列的次序是依照數字->英文->漢字停止排序的,這類排序方法可以知足部門請求,但許多情形下我們其實不願望如許分列!例如Anroid中的通信錄,音樂播放列表等等,這些情況下我們願望英文首字母和中文拼音首字母一樣的分列在一路以便利查詢。因為這類排序算法很龐雜,例如首字母雷同的字符串還要接著比擬第二個、第三個...。然則假如我們將jdk自帶的排序加以運用就不會顯得那末龐雜了;
我的設法主意是如許的:既然Java中排序是按數字->英文->漢字來停止排序的,那我們就把每一個漢字打頭的字符串後面加上一個該字符串第一個字符的拼音的首字母和一個辨別符“&”,再應用jdk供給的排序函數停止排序,這時候我們獲得的就是我們想要的排序的數組了。然後再遍歷數組,將包括&符號的字符串去失落&和第一個英文字母便完成了全部排序了,詳細完成代碼以下(獲得漢字拼音須要援用該jar:pinyin4j-2.5.0.jar):
/**
* 將字符串數字按首字母前後停止排序
*
* Java原生排序為 數字->英文->中文
* 為了將英文和中文首字母雷同的分列到一路
* 先將字符串首字符為漢字的改成該漢字的首字母加上該字符串
* 為了以示辨別中央再加一個朋分符&
* 然後應用Java原生排序算法
* 再將包括&字符的字符串中的&和首字母去除從而到達排序目標
* */
public static void main(String[] args) {
String[] arrays = new String[] { "gyu", "sdf", "zf", "年夜同", "收到", "處所", "三等分", "的人", "否決高鐵", "泛代數", "上的投入", "和國度" };
for (int i = 0; i < arrays.length; i++) {
String str = arrays[i];
if (str.length() == 0)
return;
String alphabet = str.substring(0, 1);
/*斷定首字符能否為中文,假如是中文便將首字符拼音的首字母和&符號加在字符串後面*/
if (alphabet.matches("[\\u4e00-\\u9fa5]+")) {
str = getAlphabet(str) + "&" + str;
arrays[i] = str;
}
}
/*設置排序說話情況*/
Comparator<Object> com = Collator.getInstance(java.util.Locale.CHINA);
Arrays.sort(arrays, com);
/*遍歷數組,去除標識符&及首字母*/
for (int i=0;i<arrays.length;i++) {
String str=arrays[i];
if(str.contains("&")&&str.indexOf("&")==1){
arrays[i]=str.split("&")[1];
}
System.out.println(arrays[i]);
}
}
public static String getAlphabet(String str) {
HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
// 輸入拼音全體小寫
defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
// 不帶音調
defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
String pinyin = null;
try {
pinyin = (String) PinyinHelper.toHanyuPinyinStringArray(str.charAt(0), defaultFormat)[0];
} catch (BadHanyuPinyinOutputFormatCombination e) {
e.printStackTrace();
}
return pinyin.substring(0, 1);
}
這時候輸入成果為:“年夜同 的人 處所 否決高鐵 泛代數 gyu 和國度 三等分 上的投入 收到 sdf zf”,年夜家也能夠本身測驗考試本身寫排序算法去完成,錘煉一下思想也不無害處,呵呵。
願望本文所述對年夜家Java法式設計有所贊助。