麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 編程 > Java > 正文

Java編程實(shí)現(xiàn)中英混合字符串?dāng)?shù)組按首字母排序的方法

2020-01-31 16:50:33
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

本文實(shí)例講述了Java編程實(shí)現(xiàn)中英混合字符串?dāng)?shù)組按首字母排序的方法。分享給大家供大家參考,具體如下:

在Java中對(duì)于字符串?dāng)?shù)組的排序,我們可以使用Arrays.sort(String[])方法很便捷的進(jìn)行排序。例如:

String[] arrays = new String[] { "gyu", "sdf", "zf", "大同", "收到", "地方", "三等分", "的人", "反對(duì)高鐵", "泛代數(shù)", "上的投入", "和國(guó)家" };/*設(shè)置語(yǔ)言環(huán)境*/Comparator<Object> com = Collator.getInstance(java.util.Locale.CHINA);Arrays.sort(arrays, com);for (String item:arrays) { System.out.print(item+" ");}

輸出的結(jié)果為:“gyu  sdf  zf  大同  的人  地方  反對(duì)高鐵  泛代數(shù)  和國(guó)家  三等分  上的投入  收到”;在Java中排列的順序是按照數(shù)字->英文->漢字進(jìn)行排序的,這種排序方式可以滿足部分要求,但很多情況下我們并不希望這樣排列!例如Anroid中的通訊錄,音樂(lè)播放列表等等,這些情形下我們希望英文首字母和中文拼音首字母一樣的排列在一起以方便查詢。由于這類排序算法很復(fù)雜,例如首字母相同的字符串還要接著比較第二個(gè)、第三個(gè)...。但是如果我們將jdk自帶的排序加以應(yīng)用就不會(huì)顯得那么復(fù)雜了;

我的想法是這樣的:既然Java中排序是按數(shù)字->英文->漢字來(lái)進(jìn)行排序的,那我們就把每個(gè)漢字打頭的字符串前面加上一個(gè)該字符串第一個(gè)字符的拼音的首字母和一個(gè)區(qū)分符“&”,再使用jdk提供的排序函數(shù)進(jìn)行排序,這時(shí)我們得到的就是我們想要的排序的數(shù)組了。然后再遍歷數(shù)組,將包含&符號(hào)的字符串去掉&和第一個(gè)英文字母便完成了整個(gè)排序了,具體實(shí)現(xiàn)代碼如下(獲取漢字拼音需要引用該jar:pinyin4j-2.5.0.jar):

/*** 將字符串?dāng)?shù)字按首字母先后進(jìn)行排序 * * Java原生排序?yàn)?數(shù)字->英文->中文 * 為了將英文和中文首字母相同的排列到一起 * 先將字符串首字符為漢字的改為該漢字的首字母加上該字符串 * 為了以示區(qū)分中間再加一個(gè)分割符& * 然后使用Java原生排序算法 * 再將包含&字符的字符串中的&和首字母去除從而達(dá)到排序目的 * */ public static void main(String[] args) {  String[] arrays = new String[] { "gyu", "sdf", "zf", "大同", "收到", "地方", "三等分", "的人", "反對(duì)高鐵", "泛代數(shù)", "上的投入", "和國(guó)家" }; for (int i = 0; i < arrays.length; i++) {  String str = arrays[i];  if (str.length() == 0)  return;  String alphabet = str.substring(0, 1);  /*判斷首字符是否為中文,如果是中文便將首字符拼音的首字母和&符號(hào)加在字符串前面*/  if (alphabet.matches("[//u4e00-//u9fa5]+")) {  str = getAlphabet(str) + "&" + str;  arrays[i] = str;  } } /*設(shè)置排序語(yǔ)言環(huán)境*/ Comparator<Object> com = Collator.getInstance(java.util.Locale.CHINA); Arrays.sort(arrays, com); /*遍歷數(shù)組,去除標(biāo)識(shí)符&及首字母*/ 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); // 不帶聲調(diào) 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);}

這時(shí)輸出結(jié)果為:“大同 的人 地方 反對(duì)高鐵 泛代數(shù) gyu 和國(guó)家 三等分 上的投入 收到 sdf zf”,大家也可以自己嘗試自己寫排序算法去實(shí)現(xiàn),鍛煉一下思維也不無(wú)壞處,呵呵。

PS:這里再為大家推薦2款比較實(shí)用的相關(guān)在線排序工具供大家參考使用:

在線中英文根據(jù)首字母排序工具:
http://tools.VeVB.COm/aideddesign/zh_paixu

在線文本倒序翻轉(zhuǎn)排序工具:
http://tools.VeVB.COm/aideddesign/flipped_txt

希望本文所述對(duì)大家Java程序設(shè)計(jì)有所幫助。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 鲁丝片一区二区三区免费入口 | 可以免费看的av | 精品国产91久久久久久 | avav在线播放 | 99精品视频一区二区三区 | 久久精品二区 | 免费毛片在线 | 国产精品久久久久久久不卡 | 视频一区二区国产 | 爱爱视频天天干 | 日韩做爰视频免费 | 久久99精品国产99久久6男男 | 九九热视频这里只有精品 | 中国大陆高清aⅴ毛片 | 国产亚洲区| 99精品在线观看 | 国产99久久久国产精品 | 美女网站色免费 | 日本aaa一级片 | 欧美大电影免费观看 | 亚洲第九十九页 | 9191久久久久视频 | 99亚洲国产精品 | 在线91视频| 久久草草影视免费网 | 一级免费大片 | 毛片大全在线观看 | 又黄又爽免费无遮挡在线观看 | 精品一区在线视频 | 在线播放污 | av亚洲在线观看 | 最新黄色电影网站 | 欧美日韩免费一区二区三区 | 欧美一级片网站 | 国产人成免费爽爽爽视频 | 成人黄色短视频在线观看 | 亚洲免费看片网站 | 国产精品观看在线亚洲人成网 | 中国av中文字幕 | 亚洲一区二区在线免费 | 国产精品久久久久久久久久久久久久久久 |