中英文混合拼音排序(从首字母开始,相同则往下比较)

中文/英文混合数据 进行转拼音(中文),按照26个字母顺序排序,从首字母开始比较,相同则比较第二个字母,如此类推,直到结束排序为止。

pom.xml添加依赖

<!-- https://mvnrepository.com/artifact/com.belerweb/pinyin4j -->
<dependency><groupId>com.belerweb</groupId><artifactId>pinyin4j</artifactId><version>2.5.1</version>
</dependency>

代码如下:

package cn.com.rikylinz.util;import com.alibaba.fastjson.JSON;
import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.util.List;/*** 中英文混合 拼音排序* 排序规则:26个字母顺序排序,从首字母开始比较,相同则比较下一个字母* @author RiKylinz* @createDate 2021-02-26*/
public class ChinaPinYinUtils {//日志打印类private static Logger logger = LoggerFactory.getLogger(ChinaPinYinUtils.class);private static ChinaPinYinUtils instance;public static ChinaPinYinUtils getInstance(){if(instance == null){return new ChinaPinYinUtils();}return instance;}/*** 汉字全拼* @param chinese   汉字/英文* @return*/public String getPinyin(String chinese){char[] chars = chinese.toCharArray();//对输出的拼音设置HanyuPinyinOutputFormat pinYinType = new HanyuPinyinOutputFormat();pinYinType.setCaseType(HanyuPinyinCaseType.LOWERCASE);//小写pinYinType.setToneType(HanyuPinyinToneType.WITHOUT_TONE);//不带音标pinYinType.setVCharType(HanyuPinyinVCharType.WITH_V);//百度,本人也不知道String chinesePingyin = "";try {for (int i = 0; i < chars.length; i++) {//判断当前字符是否为汉字字符if(Character.toString(chars[i]).matches("[\\u4E00-\\u9FA5]+")){//汉字String[] array = PinyinHelper.toHanyuPinyinStringArray(chars[i], pinYinType);chinesePingyin += array[0];}else{//英文chinesePingyin += Character.toString(chars[i]).toLowerCase();}}} catch (Exception e) {logger.info("汉字转全拼错误,错误原因:{}",e);e.printStackTrace();}return chinesePingyin;}/*** 汉字/英文混合数据 排序* 排序规则:字母按照26个字母顺序排序,出现相同,则判断下一个拼音字母* @param data  排序前的数据* @return  排序后的数据*/public List<String> dataSort(List<String> data){System.out.println("排序前data = " + JSON.toJSONString(data));data.sort((x,y) -> this.compareTo(getPinyin(x),getPinyin(y)));System.out.println("排序后data = " + JSON.toJSONString(data));return data;}/***比较方法* @param preString       第一个比较数据* @param suffString 第二个比较数据* @return preString {1:大于,0:等于,-1:小于} suffString*/private int compareTo(String preString,String suffString){char[] preChars = preString.toCharArray();char[] suffChars = suffString.toCharArray();if(preChars.length < suffChars.length){for (int i = 0; i < preChars.length; i++) {//当前字符相等时,继续往下判断if((int)preChars[i] == (int)suffChars[i]){//当前下标 是preChars最后下标,但不是suffChars的最后下标if(i == preChars.length - 1 && i < suffChars.length - 1){return -1;}continue;}else{if((int)preChars[i] - (int)suffChars[i] > 0){//小于return -1;}else{//大于return 1;}}}}else{for (int i = 0; i < suffChars.length; i++) {//当前字符相等时,继续往下判断if((int)preChars[i] == (int)suffChars[i]){//当前下标 是suffChars最后下标,但不是preChars的最后下标if(i == suffChars.length - 1 && i < preChars.length - 1){return 1;}continue;}else{if((int)preChars[i] - (int)suffChars[i] > 0){//小于return -1;}else{//大于return 1;}}}}return 0;}
}

中英文混合拼音排序(从首字母开始,相同则往下比较)相关推荐

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

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

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

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

  3. C#汉字转拼音(npinyin)将中文转换成拼音全文或首字母

    汉字转拼音貌似一直是C#开发的一个难题,无论什么方案都有一定的bug,之前使用了两种方案. 1.Chinese2Spell.cs 一些不能识别的汉字全部转为Z 2.Microsoft Visual S ...

  4. Java获取中文拼音、中文首字母缩写和中文首字母

    我们有时候会遇到这样的情况,需要获取某些中文的拼音.中文首字母缩写和中文首字母,下面我将为大家介绍一下如何获取中文拼音的缩写. 1.项目建立和配置 首先,我们建立一个java项目,新建libs文件夹并 ...

  5. python排序输出人名,005_015 Python 人名按字母排序,首字母分组

    代码如下: #encoding=utf-8 print '中国' #人名按字母排序,首字母分组 import itertools import itertools def groupnames(nam ...

  6. python排序输出人名_005_015 Python 人名按字母排序,首字母分组 | 学步园

    代码如下: #encoding=utf-8 print '中国' #人名按字母排序,首字母分组 import itertools import itertools def groupnames(nam ...

  7. Excel汉字转拼音并提取首字母

    Excel汉字转拼音并提取首字母步奏 1.打开VB窗口alt+f11可以快捷打开 2.如下图新建模块 3.模块建好后插入代码 Function getpychar(char)tmp = 65536 + ...

  8. Excel中文转拼音(中文首字母)

    Excel中文转拼音(中文首字母) 1.打开Excel->Alt+F11->Viaual Basic编辑器 2.在弹出来的窗口中点击插入->模块->ctrl+s 保存 Func ...

  9. 小程序楼层索引,将汉字转换为拼音并以首字母排序

    1.根据正则码校验汉字对应的拼音: export default {pinyin: {"a": "\u554a\u963f\u9515","ai&qu ...

最新文章

  1. python把文件读成字节流_Python中对字节流/二进制流的操作:struct
  2. 我的DWR学习(一)
  3. 最小公倍数(Least_Common_Multiple)
  4. 关于scriptManager与JS代码兼容问题
  5. 阿里Java编程规约(控制语句)
  6. python 写入csv 文件显示乱码_python 写入csv乱码问题解决方法
  7. 【less-24】基于SQLI的二次注入
  8. HTML内置css改变文字效果,CSS+HTML文字效果
  9. Zimbra的zmcontral服务无法起来,提示ldap有问题。
  10. python中实用的collections模块
  11. Android 移动应用开发模拟题
  12. c语言随机抽奖小程序,基于C#实现简单的随机抽奖小程序
  13. 【STM32】 AMS1117(稳压)模块
  14. 密钥文件snk 、AssemblyInfo.cs
  15. 星际争霸、魔兽争霸3、红色警戒之完全对比
  16. 直播讲座:时序数据库 Apache IoTDB 的核心技术与应用
  17. OKR-Periods of Words
  18. 如何在素材中心中下载字体并安装?
  19. PYQT5安装时,labelImg执行pyrcc5 -o libs/resources.py resources.qrc 报错:File does not exist ‘resources.qrc‘
  20. 现代企业管理笔记——控制

热门文章

  1. 灰狼优化算法(Grey Wolf Optimizer, GWO)
  2. scratch节假日课程:元旦贺卡的制作
  3. 昨天,我的大学学习[5]--转载自:www.cstc.net.cn
  4. tensorflow1运用模型断点续训、恢复图和进行预测
  5. NetLogo基础代码
  6. Qt 数字报阅读器 图文版
  7. LINUX 下SQL server 安装、配置及对接ceph功能性能测试
  8. 服务器灾备解决方案--两地三中心(图文详解)
  9. WHM面板修改PHP版本教程
  10. Word操作技巧大全1(转)