• 毛丹青:故乡是文学的起跑线 2019-12-10
  • 不简单的职业谈资中国国家地理网 2019-12-10
  • 袁亮任安徽理工大学校长 2019-12-08
  • 重庆“彩色S型公路”正式通车  市民开车排队体验 2019-12-08
  • 2017年全国“创新社会治理典型案例”征集活动专家评审结果 2019-12-03
  • 首批甲骨文释读优秀成果 获奖名单公布 2019-11-24
  • 海淀区曙光街道举办第五届龙舟赛 2019-11-16
  • 广汽传祺新GS4将6月16日上市 配置升级 2019-11-15
  • 李克强访问印尼、出席中日韩第七次领导人会晤并对日本正式访问 2019-11-15
  • 推动长江经济带发展 习近平要求境界和担当 2019-11-11
  • 丰台东铁匠营街道:品粽赏乐感受改革开放四十周年 2019-11-11
  • 学习宣传宪法 弘扬法治精神 2019-11-07
  • 山东搭建“灯塔—党建在线”网络平台 2019-11-07
  • 2016杨宗纬VOCAL巡演北京站正式开票杨宗纬VOCAL 2019-11-04
  • 年龄大了,也想积点口德,已经给你笔下留情了。 2019-11-04
  • 赛事香港赛马会:Java编程实现中英混合字符串数组按首字母排序的方法

     更新时间:2015年11月18日 16:01:00   作者:luoboo525   我要评论
    这篇文章主要介绍了Java编程实现中英混合字符串数组按首字母排序的方法,涉及Java字符串操作及拼音转换的相关使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下

    香港赛马会网站惠泽社绝杀八码 www.mwcrz.tw 本文实例讲述了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”,大家也可以自己尝试自己写排序算法去实现,锻炼一下思维也不无坏处,呵呵。

    PS:这里再为大家推荐2款比较实用的相关在线排序工具供大家参考使用:

    在线中英文根据首字母排序工具:
    //tools.jb51.net/aideddesign/zh_paixu

    在线文本倒序翻转排序工具:
    //tools.jb51.net/aideddesign/flipped_txt

    希望本文所述对大家Java程序设计有所帮助。

    相关文章

  • Java咖啡馆(1)——叹咖啡

    Java咖啡馆(1)——叹咖啡

    Java咖啡馆(1)——叹咖啡...
    2006-12-12
  • 面向对象编程:Java中的抽象数据类型

    面向对象编程:Java中的抽象数据类型

    面向对象编程:Java中的抽象数据类型...
    2006-12-12
  • Java编写中容易搞错的一些东西

    Java编写中容易搞错的一些东西

    Java编写中容易搞错的一些东西...
    2006-12-12
  • finally 一定会执行(实例代码)

    finally 一定会执行(实例代码)

    下面小编就为大家带来一篇finally 一定会执行(实例代码)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • Java运行时多态性的实现

    Java运行时多态性的实现

    Java运行时多态性的实现...
    2006-12-12
  • 最新评论

    微信 投稿 在线工具
  • 毛丹青:故乡是文学的起跑线 2019-12-10
  • 不简单的职业谈资中国国家地理网 2019-12-10
  • 袁亮任安徽理工大学校长 2019-12-08
  • 重庆“彩色S型公路”正式通车  市民开车排队体验 2019-12-08
  • 2017年全国“创新社会治理典型案例”征集活动专家评审结果 2019-12-03
  • 首批甲骨文释读优秀成果 获奖名单公布 2019-11-24
  • 海淀区曙光街道举办第五届龙舟赛 2019-11-16
  • 广汽传祺新GS4将6月16日上市 配置升级 2019-11-15
  • 李克强访问印尼、出席中日韩第七次领导人会晤并对日本正式访问 2019-11-15
  • 推动长江经济带发展 习近平要求境界和担当 2019-11-11
  • 丰台东铁匠营街道:品粽赏乐感受改革开放四十周年 2019-11-11
  • 学习宣传宪法 弘扬法治精神 2019-11-07
  • 山东搭建“灯塔—党建在线”网络平台 2019-11-07
  • 2016杨宗纬VOCAL巡演北京站正式开票杨宗纬VOCAL 2019-11-04
  • 年龄大了,也想积点口德,已经给你笔下留情了。 2019-11-04
  • 开元棋牌下载app送18 北京单场足球佛山哪里有卖 青海快三走势图一定牛 时时中彩票 高频彩联盟北京赛车开奖 广东时时彩玩法说明 处理线路板赚钱利润 25选5玩法介绍 福建11选5所有开奖结果 电子游艺狗年超凡豪礼