欧美成人午夜免费全部完,亚洲午夜福利精品久久,а√最新版在线天堂,另类亚洲综合区图片小说区,亚洲欧美日韩精品色xxx

扣丁學(xué)堂Java培訓(xùn)之Java編程實(shí)現(xiàn)中英混合字符串?dāng)?shù)組按首字母排序的方法

2018-05-23 11:47:43 1351瀏覽

本篇文章扣丁學(xué)堂Java培訓(xùn)小編主要是和大家分享Java編程實(shí)現(xiàn)中英混合字符串?dāng)?shù)組按首字母排序的方法,文章中會(huì)有代碼列出,對(duì)Java感興趣想要學(xué)習(xí)的小伙伴下面和小編一起來看一下吧。


扣丁學(xué)堂Java培訓(xùn)之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ù)", "上的投入", "和國家" };
/*設(shè)置語言環(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ù)  和國家  三等分  上的投入  收到”;在Java中排列的順序是按照數(shù)字->英文->漢字進(jìn)行排序的,這種排序方式可以滿足部分要求,但很多情況下我們并不希望這樣排列!例如Anroid中的通訊錄,音樂播放列表等等,這些情形下我們希望英文首字母和中文拼音首字母一樣的排列在一起以方便查詢。由于這類排序算法很復(fù)雜,例如首字母相同的字符串還要接著比較第二個(gè)、第三個(gè)...。但是如果我們將jdk自帶的排序加以應(yīng)用就不會(huì)顯得那么復(fù)雜了;


我的想法是這樣的:既然Java中排序是按數(shù)字->英文->漢字來進(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ù)", "上的投入", "和國家" };
 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è)置排序語言環(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 和國家 三等分 上的投入 收到 sdf zf”,大家也可以自己嘗試自己寫排序算法去實(shí)現(xiàn),鍛煉一下思維也不無壞處。



以上就是扣丁學(xué)堂Java在線學(xué)習(xí)小編給大家分享的Java編程實(shí)現(xiàn)中英混合字符串?dāng)?shù)組按首字母排序的方法,希望對(duì)小伙伴們有幫助。想要了解更多內(nèi)容的小伙伴可以登錄扣丁學(xué)堂官網(wǎng)查看,或者是通過扣丁學(xué)堂微信等平臺(tái)咨詢。扣丁學(xué)堂是專業(yè)的Java培訓(xùn)機(jī)構(gòu),通過千鋒扣丁學(xué)堂金牌講師在線錄制Java視頻教程內(nèi)容,讓你快速掌握J(rèn)ava從入門到精通的實(shí)戰(zhàn)技能,想要學(xué)好Java的話現(xiàn)在就行動(dòng)吧。Java技術(shù)交流群:670348138。


扣丁學(xué)堂微信公眾號(hào)


【關(guān)注微信公眾號(hào)獲取更多學(xué)習(xí)資料】



查看更多關(guān)于“Java開發(fā)資訊的相關(guān)文章>>



標(biāo)簽: 扣丁學(xué)堂Java培訓(xùn) Java編程實(shí)現(xiàn)中英混合字符串?dāng)?shù)組按首字母排序的方法 Java培訓(xùn) Java基礎(chǔ)教程 Java學(xué)習(xí)視頻 Java教學(xué)視頻 java入門教程 Java教程視頻 java在線學(xué)習(xí) java在線視頻 java在線教程

熱門專區(qū)

暫無熱門資訊

課程推薦

微信
微博
15311698296

全國免費(fèi)咨詢熱線

郵箱:codingke@1000phone.com

官方群:148715490

北京千鋒互聯(lián)科技有限公司版權(quán)所有   北京市海淀區(qū)寶盛北里西區(qū)28號(hào)中關(guān)村智誠科創(chuàng)大廈4層
京ICP備2021002079號(hào)-2   Copyright ? 2017 - 2022
返回頂部 返回頂部