Java编程实现中英混合字符串数组按首字母排序的方法

 更新时间:2015年11月18日 16:01:00   作者:luoboo525  
这篇文章主要介绍了Java编程实现中英混合字符串数组按首字母排序的方法,涉及Java字符串操作及拼音转换的相关使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

本文实例讲述了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款比较实用的相关在线排序工具供大家参考使用:

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

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

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

相关文章

  • SpringBoot中的@EnableConfigurationProperties注解详细解析

    SpringBoot中的@EnableConfigurationProperties注解详细解析

    这篇文章主要介绍了SpringBoot中的@EnableConfigurationProperties注解详细解析,如果一个配置类只配置@ConfigurationProperties注解,而没有使用@Component或者实现了@Component的其他注解,那么在IOC容器中是获取不到properties 配置文件转化的bean,需要的朋友可以参考下
    2024-01-01
  • MyBatis-Plus 查询返回实体对象还是map

    MyBatis-Plus 查询返回实体对象还是map

    这篇文章主要介绍了MyBatis-Plus 查询返回实体对象还是map,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • java面向对象编程类的内聚性分析

    java面向对象编程类的内聚性分析

    高内聚、低耦合是软件设计中非常关键的概念。在面向对象程序设计中类的划分时,类的内聚性越高,其封装性越好,越容易复用
    2021-10-10
  • Spring Boot快速搭建Spring框架教程

    Spring Boot快速搭建Spring框架教程

    这篇文章主要为大家详细介绍了Spring Boot快速搭建Spring框架教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • Java JDBC基本使用方法详解

    Java JDBC基本使用方法详解

    这篇文章主要介绍了Java JDBC基本使用方法,结合实例形式详细分析了java JDBC基本原理、用法及操作注意事项,需要的朋友可以参考下
    2020-04-04
  • Springboot 如何使用@Async整合线程池

    Springboot 如何使用@Async整合线程池

    这篇文章主要介绍了Springboot 使用@Async整合线程池的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • Java中@Pattern注解常用的校验正则表达式学习笔记

    Java中@Pattern注解常用的校验正则表达式学习笔记

    对于正则这个东西,对我来说一直是很懵逼的,每次用每次查,然后还是记不住,下面这篇文章主要给大家介绍了关于Java中@Pattern注解常用的校验正则表达式学习笔记的相关资料,需要的朋友可以参考下
    2022-07-07
  • SpringCloud灰度发布的设计与实现详解

    SpringCloud灰度发布的设计与实现详解

    这篇文章主要介绍了SpringCloud灰度发布的设计与实现详解,灰度从字面意思理解就是存在于黑与白之间的一个平滑过渡的区域,所以说对于互联网产品来说,上线和未上线就是黑与白之分,而实现未上线功能平稳过渡的一种方式就叫做灰度发布,需要的朋友可以参考下
    2023-09-09
  • Java swing仿酷狗音乐播放器

    Java swing仿酷狗音乐播放器

    这篇文章主要为大家详细介绍了Java swing实现音乐播放器,Java开发图形界面程序音乐播放器仿酷狗音乐播放器,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • Mybatis中的延迟加载详细解析

    Mybatis中的延迟加载详细解析

    这篇文章主要介绍了Mybatis中的延迟加载详细解析,延迟加载就是在真正需要使用数据时才发起查询,不用的时候不进行查询,按需加载(懒加载),需要的朋友可以参考下
    2023-12-12

最新评论

?


http://www.vxiaotou.com