欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2015年11月18日 16:01:00   作者:luoboo525  
這篇文章主要介紹了Java編程實(shí)現(xiàn)中英混合字符串?dāng)?shù)組按首字母排序的方法,涉及Java字符串操作及拼音轉(zhuǎn)換的相關(guān)使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下

本文實(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中的通訊錄,音樂播放列表等等,這些情形下我們希望英文首字母和中文拼音首字母一樣的排列在一起以方便查詢。由于這類排序算法很復(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ù)", "上的投入", "和國(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),鍛煉一下思維也不無壞處,呵呵。

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

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

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

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

相關(guān)文章

  • SpringAOP實(shí)現(xiàn)登錄驗(yàn)證的操作代碼

    SpringAOP實(shí)現(xiàn)登錄驗(yàn)證的操作代碼

    這篇文章主要介紹了SpringAOP實(shí)現(xiàn)登錄驗(yàn)證功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-01-01
  • java abstract class interface之間的區(qū)別介紹

    java abstract class interface之間的區(qū)別介紹

    含有abstract修飾符的class即為抽象類,abstract 類不能創(chuàng)建的實(shí)例對(duì)象,abstract class類中定義抽象方法必須在具體(Concrete)子類中實(shí)現(xiàn),所以,不能有抽象構(gòu)造方法或抽象靜態(tài)方法
    2012-11-11
  • list集合去除重復(fù)對(duì)象的實(shí)現(xiàn)

    list集合去除重復(fù)對(duì)象的實(shí)現(xiàn)

    下面小編就為大家?guī)硪黄猯ist集合去除重復(fù)對(duì)象的實(shí)現(xiàn)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-01-01
  • springboot集成mybatis-plus全過程

    springboot集成mybatis-plus全過程

    本文詳細(xì)介紹了如何在SpringBoot環(huán)境下集成MyBatis-Plus,包括配置maven依賴、application.yaml文件、創(chuàng)建數(shù)據(jù)庫(kù)和Java實(shí)體類、Mapper層、Service層和Controller層的設(shè)置,同時(shí),還涵蓋了時(shí)間自動(dòng)填充、分頁(yè)查詢、多對(duì)一和一對(duì)多的數(shù)據(jù)庫(kù)映射關(guān)系設(shè)置
    2024-09-09
  • java調(diào)用ffmpeg實(shí)現(xiàn)轉(zhuǎn)換視頻

    java調(diào)用ffmpeg實(shí)現(xiàn)轉(zhuǎn)換視頻

    這篇文章主要為大家詳細(xì)介紹了java調(diào)用ffmpeg實(shí)現(xiàn)轉(zhuǎn)換視頻功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Java中synchronized?的4個(gè)優(yōu)化技巧

    Java中synchronized?的4個(gè)優(yōu)化技巧

    本文主要介紹了Java中synchronized的4個(gè)優(yōu)化技巧,synchronized在JDK?1.5?時(shí)性能是比較低的,然而在后續(xù)的版本中經(jīng)過各種優(yōu)化迭代,它的性能也得到了前所未有的提升,下文更多相關(guān)資料需要的小伙伴可以參考一下
    2022-05-05
  • Java+MySQL前后端連接新手小白教程

    Java+MySQL前后端連接新手小白教程

    Java作為一種廣泛使用的編程語(yǔ)言之一,在開發(fā)Web應(yīng)用程序時(shí)經(jīng)常需要連接MySQL數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)操作,下面這篇文章主要給大家介紹了關(guān)于Java+MySQL前后端連接的相關(guān)資料,需要的朋友可以參考下
    2024-03-03
  • 關(guān)于Java中常見的負(fù)載均衡算法

    關(guān)于Java中常見的負(fù)載均衡算法

    這篇文章主要介紹了關(guān)于Java中常見的負(fù)載均衡算法,負(fù)載平衡是一種電子計(jì)算機(jī)技術(shù),用來在多個(gè)計(jì)算機(jī)、網(wǎng)絡(luò)連接、CPU、磁盤驅(qū)動(dòng)器或其他資源中分配負(fù)載,以達(dá)到優(yōu)化資源使用、最大化吞吐率、最小化響應(yīng)時(shí)間、同時(shí)避免過載的目的,需要的朋友可以參考下
    2023-08-08
  • Java?IDEA集成開發(fā)工具中英文切換圖文教程

    Java?IDEA集成開發(fā)工具中英文切換圖文教程

    相信很多小伙伴們剛接觸IDEA時(shí),看到一堆英文界面不知道如何下手,這篇文章主要給大家介紹了關(guān)于Java?IDEA集成開發(fā)工具中英文切換的相關(guān)資料,需要的朋友可以參考下
    2024-04-04
  • @Data注解在Boolean類型屬性上的大坑及解決

    @Data注解在Boolean類型屬性上的大坑及解決

    在使用@Data注解時(shí),如果類中存在Boolean類型的屬性,且屬性名不是以"is"開頭,那么@Data注解生成的get方法名會(huì)默認(rèn)加上"is",導(dǎo)致屬性值無法成功拷貝,解決方法是手動(dòng)添加get方法,覆蓋@Data注解生成的方法
    2024-10-10

最新評(píng)論