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順序設計有所協助。