本文实例讲述了Java编程实现中英混合字符串数组按首字母排序的方法。分享给大家供大家参考,具体如下:

在Java中对于字符串数组的排序,我们可以使用Arrays.sort(String[])方法很便捷的进行排序。例如:

String[] arrays = new String[] { "gyu", "sdf", "zf", "大同", "收到", "地方", "三等分", "的人", "反对高铁", "泛代数", "上的投入", "和国家" };

/*设置语言环境*/

Comparator 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 com = Collator.getInstance(java.util.Locale.CHINA);

Arrays.sort(arrays, com);

/*遍历数组,去除标识符&及首字母*/

for (int i=0;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款比较实用的相关在线排序工具供大家参考使用:

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

java中英文汉语混合排序_Java编程实现中英混合字符串数组按首字母排序的方法...相关推荐

  1. java中英文混合排序_Java编程实现中英混合字符串数组按首字母排序的方法

    本文实例讲述了Java编程实现中英混合字符串数组按首字母排序的方法.分享给大家供大家参考,具体如下: 在Java中对于字符串数组的排序,我们可以使用Arrays.sort(String[])方法很便捷 ...

  2. java英文字母排序_Java编程实现中英混合字符串数组按首字母排序的方法

    在Java中对于字符串数组的排序,我们可以使用Arrays.sort(String[])方法很便捷的进行排序.例如: 输出的结果为:"gyu  sdf  zf  大同  的人  地方  反对 ...

  3. java面向字符的输入流_Java编程开发中面向字节的输入输出流

    关于面向字符的输入流和输出流方面教程已经讲解完了,下面要介绍的就是Java编程开发中面向字节的输入输出流,希望本节内容可以帮助大家更好的学习Java. 教程回顾点击查看: 字节流以字节为传输单位,用来 ...

  4. String类型数组 根据首字母排序

    String[] arr = new String[] {"asa","fda","ds","sxc","ca ...

  5. java首字母排序_Java-首字母排序汉字排序

    Java 字符串数组首字母排序 字符串数组按首字母排序:(区分大小写) String[] strings = new String[]{"ba","aa",&q ...

  6. 中英文混合按照首字母排序

    中英文混合按照首字母排序 在项目做报表的时候,客户那边提出了默认按照客户的首字母排序,做完才发现有些客户的名字是英文,所以在这边写了一个混合排序的方法.思想就是:如果检查是汉语就把拼音的首字母附在汉字 ...

  7. Java姓名数组元素按照字母排序

    package homework;import java.text.Collator; import java.util.Arrays; import java.util.Comparator;pub ...

  8. 首字母排序侧边索引栏:WaveSideBar的简单使用

    参考 [WaveSideBar](https://github.com/gjiazhe/WaveSideBar) 场景 在Android开发中会经常用到侧边索引栏,并且根据中文的首字母排序.额..废话 ...

  9. 【工具封装】Python 字典列表按中文姓名首字母排序

    第三方模块: 功       能: 汉字拼音转换模块,将汉字转为拼音:可以用于汉字注音.排序.检索. 模块名称: pypinyin 官方文档: https://pypi.org/project/pyp ...

最新文章

  1. TensorFlow please use urllib or similar directly错误。
  2. Idiomatic Python手记一: average in FP way
  3. 有什么值得推荐的Java Web练手项目?
  4. 九十、深入弹性(Flex)布局
  5. 【Linux】一步一步学Linux——tty命令(240)
  6. 一段典型的PHP程序都包含那些内容呢?
  7. [激励机制]浅谈内部竞争——如何让你的员工玩命干活?
  8. 互联网日报 | 6月23日 星期三 | 苏宁置业否认破产及相关传闻;满帮集团正式登陆纽交所;百度公布2030碳中和目标...
  9. Kali Linux之软件安装、卸载、更新和修改更新源
  10. 钉钉运营商服务器在哪,钉钉应用服务商
  11. axure轮播图怎么设置循环轮播_Axure RP8 动态面板之轮播图设置
  12. i9-10900K比9900K性能提升了多少?i9-10900K和i9-9900K区别对比评测
  13. Android 内存映射mmap浅谈
  14. cad快捷栏怎么调出来_cad怎么显示工具栏快捷键 cad快捷键常见问题解决办法
  15. GTX1050Ti和GTX1060显卡哪个好?
  16. 转 一个游戏程序员的学习资料
  17. Python 程序员需要知道的 30 个技巧
  18. cocos2d-x教程和项目实例集合
  19. Scala基础知识(个人总结)
  20. Android:有关下拉菜单导航的学习(供自己参考)

热门文章

  1. 用python预测小孩的身高_Python+sklearn使用线性回归算法预测儿童身高
  2. 文本溢出显示省略号效果
  3. PeopleSoft如何配置SMTP邮件服务
  4. Android开发中长度单位简介
  5. 如何增加架设传奇服务器
  6. CMU 15-445/645 数据库系统Lab 1 现代C++练习项目
  7. Linux ip forward转发问题总结
  8. 用python画星空-【Python】手把手教你绘制星空旅游线路图
  9. 关于IE下载文件无法弹出下载框
  10. rfc3550-rtp:一种实时应用的传输协议