java中根据集合中的汉字进行排序(汉字数字)

需要对list集合中的description字段进行排序,description是汉字且包含汉字数字,如下:

new LegLists("来源-西宁", "第三百一十四赛段"),
new LegLists("平安-来源", "第一千三百一十四赛段"),
new LegLists("平安-西宁", "第六十三赛段")

根据第二个字段,第几赛段进行排序。

整体代码:

    public static void main(String[] args) {List<LegLists> legLists = Arrays.asList(new LegLists("来源-西宁", "第三百一十四赛段"),new LegLists("平安-来源", "第一千三百一十四赛段"),new LegLists("平安-西宁", "第六十三赛段"));Collections.sort(legLists, new Comparator<LegLists>() {@Overridepublic int compare(LegLists o1, LegLists o2) {int num1 = extractNumber(o1.getDescription());int num2 = extractNumber(o2.getDescription());return Integer.compare(num1, num2);}private int extractNumber(String s) {Matcher matcher = Pattern.compile("[零一二三四五六七八九十百千万]+").matcher(s);if (matcher.find()) {return chineseNumberToInt(matcher.group());}return 0;}private int chineseNumberToInt(String chineseNumber) {Map<Character, Integer> chineseToArabic = new HashMap<>();chineseToArabic.put('零', 0);chineseToArabic.put('一', 1);chineseToArabic.put('二', 2);chineseToArabic.put('三', 3);chineseToArabic.put('四', 4);chineseToArabic.put('五', 5);chineseToArabic.put('六', 6);chineseToArabic.put('七', 7);chineseToArabic.put('八', 8);chineseToArabic.put('九', 9);chineseToArabic.put('十', 10);chineseToArabic.put('百', 100);chineseToArabic.put('千', 1000);chineseToArabic.put('万', 10000);int result = 0;int temp = 0;int lastUnit = 1;for (char ch : chineseNumber.toCharArray()) {int num = chineseToArabic.getOrDefault(ch, -1);if (num != -1) {if (num >= 10) { // it's a unit like 十,百,千,万if (temp == 0) {temp = 1;}result += temp * num;temp = 0;lastUnit = num;} else {temp = temp * 10 + num;}}}result += temp * lastUnit;return result;}});for (LegLists lists : legLists) {System.out.println(lists);}}static class LegLists {/*** 赛段名称*/private String legName;public LegLists(String legName, String description) {this.legName = legName;this.description = description;}/*** 对应的是第几赛段(截图文字描述用)*/private String description;public String getLegName() {return legName;}public void setLegName(String legName) {this.legName = legName;}public String getDescription() {return description;}public void setDescription(String description) {this.description = description;}@Overridepublic String toString() {return "LegLists{" +"legName='" + legName + '\'' +", description='" + description + '\'' +'}';}}

下面是我抽出来的工具类,用于提取汉字中的中文数字,并转成数字:

public class ChineseNumber {public static int extractNumber(String s) {Matcher matcher = Pattern.compile("[零一二三四五六七八九十百千万]+").matcher(s);if (matcher.find()) {return chineseNumberToInt(matcher.group());}return 0;}public static int chineseNumberToInt(String chineseNumber) {Map<Character, Integer> chineseToArabic = new HashMap<>();chineseToArabic.put('零', 0);chineseToArabic.put('一', 1);chineseToArabic.put('二', 2);chineseToArabic.put('三', 3);chineseToArabic.put('四', 4);chineseToArabic.put('五', 5);chineseToArabic.put('六', 6);chineseToArabic.put('七', 7);chineseToArabic.put('八', 8);chineseToArabic.put('九', 9);chineseToArabic.put('十', 10);chineseToArabic.put('百', 100);chineseToArabic.put('千', 1000);chineseToArabic.put('万', 10000);int result = 0;int temp = 0;int lastUnit = 1;for (char ch : chineseNumber.toCharArray()) {int num = chineseToArabic.getOrDefault(ch, -1);if (num != -1) {if (num >= 10) { // it's a unit like 十,百,千,万if (temp == 0) {temp = 1;}result += temp * num;temp = 0;lastUnit = num;} else {temp = temp * 10 + num;}}}result += temp * lastUnit;return result;}
}

剩下的排序就简单了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/28753.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JL-04 多点土壤温度记录仪 可接6路温度 厂家直营

技术参数&#xff1a; 温度范围&#xff1a;-30℃&#xff5e;70℃ 测量精度&#xff1a;0.2℃ 温度分辨率&#xff1a;0.1℃ 记录容量&#xff1a;6通道 &#xff1e;80000条 记录仪间隔&#xff1a;1分&#xff5e;24小时可调 数据导出&#xff1a;USB接口&#xff0c;…

subversion

subversion Install # CentOS安装Subversion yum install subversion mkdir /var/svn/ systemctl restart svnserve# Docker安装Subversion&#xff08;参考&#xff1a;https://github.com/garethflowers/docker-svn-server&#xff09; docker run \--name my-svn-server \…

LNMP构建

概要 概要 LAMP是Linux、Apache、MySQL、PHP/Perl/Python的简称。1998年Michael Kunze 在电脑杂志C’T撰写的文章中首次使用了缩略语LAMP。它所组成的各组件都是开源软件&#xff0c;因此很方便自由的获取&#xff0c;导致这些组件的广泛使用&#xff0c;并不断完善发展&#x…

探讨 Redis 的线程与 IO 模型

在线工具站 推荐一个程序员在线工具站&#xff1a;程序员常用工具&#xff08;http://cxytools.com&#xff09;&#xff0c;有时间戳、JSON格式化、文本对比、HASH生成、UUID生成等常用工具&#xff0c;效率加倍嘎嘎好用。 程序员资料站 推荐一个程序员编程资料站&#xff1a;…

辛弃疾,笔墨剑影的一生

辛弃疾&#xff0c;字幼安&#xff0c;号稼轩&#xff0c;生于南宋高宗赵构绍兴十年&#xff08;公元1140年&#xff09;&#xff0c;卒于南宋宁宗赵扩嘉泰元年&#xff08;公元1207年&#xff09;&#xff0c;享年67岁。他是中国南宋时期著名的爱国词人&#xff0c;与苏轼并称…

《C语言》动态内存管理

文章目录 一、动态内存分配二、关于动态内存开辟的函数1、malloc2、free3、calloc4、realloc 三、常见的动态内存的错误1、对NULL指针的解引用操作2、对动态开辟空间的越界访问3、对非动态开辟内存使用free释放4、释放free释放一块动态开辟的内存的一部分5、对同一块动态内存多…

怎么学习汇川Codesys PLC教程?

前言 各位好&#xff0c;我在B站和抖音上都有发布视频的&#xff0c;搜索我的名称“阿凡工控分享”即可。在CSDN上发表文章也是想把我的一点见解和经验分享出来&#xff0c;进一步的方便大家进行学习。 我是正文 本文主要也是为了方便大家学习汇川的Codesys PLC而制作的&…

struts2框架漏洞

title: struts2框架漏洞 categories: 漏洞复现 abbrlink: 48203 date: 2024-06-14 15:45:27 前言知识 ognl表达式注入 对象导航图语言&#xff0c;用于访问对象的字段、方法。基于简化访问java对象属性和调用方法需求&#xff0c;实现字段类型转化等功能&#xff1b;访问列表…

MySQL触发器基本结构

1.修改分隔符符号 delimiter $$ 可以修改成$$//都行 2.创建触发函数名称 create trigger 函数名 3.什么样的操作触发&#xff0c;操作那个 after .....之后触发器 befor .....之前触发器 insert ......插入被触发器 upbate 修改被触发 delete 删除被触发 on 表名 实…

springboot请求头获得数据

PostMapping("select")public Result select(RequestBody Map searchMap,RequestHeader HttpHeaders headers) throws Exception {//获得请求头令牌解密List<String> token headers.get("token");Map jwt JwtUtil.parseJWT(token.get(0));//切换数…

高分论文密码---大尺度空间模拟预测与数字制图

大尺度空间模拟预测和数字制图技术和不确定性分析广泛应用于高分SCI论文之中&#xff0c;号称高分论文密码。大尺度模拟技术可以从不同时空尺度阐明农业生态环境领域的内在机理和时空变化规律&#xff0c;又可以为复杂的机理过程模型大尺度模拟提供技术基础。我们将结合一些经典…

板凳----Linux/Unix 系统编程手册 25章 进程的终止

25.1 进程的终止&#xff1a;_exit()和exit() 440 1. _exit(int status)&#xff0c; status 定义了终止状态&#xff0c;父进程可调用 wait 获取。仅低8位可用&#xff0c;调用 _exit() 总是成功的。 2.程序一般不会调用 _exit()&#xff0c; 而是调用库函数 exit()。exit() …

pyautogui 图像定位功能

pyautogui 是一个用于GUI自动化的Python库。您可以使用它来编程控制鼠标和键盘&#xff0c;实现自动化任务。如果您想通过图片在屏幕上定位位置&#xff0c;可以使用 pyautogui 的 locateOnScreen 函数。以下是一个简单的教程&#xff1a; 安装pyautogui: 如果您还没有安装 py…

《QT实用小工具·七十》openssl+qt开发的P2P文件加密传输工具

1、概述 源码放在文章末尾 该项目实现了P2P的文件加密传输功能&#xff0c;具体包含如下功能&#xff1a; 1、 多文件多线程传输 2、rsaaes文件传输加密 3、秘钥随机生成 4、断点续传 5、跨域传输引导服务器 项目界面如下所示&#xff1a; 接收界面 发送界面 RSA秘钥生成…

从0到1搭建MCU芯片上操作系统环境。开发都需要哪些环节和准备

MCU芯片环境搭建与操作系统上载步骤 1. 硬件准备 选择合适的MCU芯片&#xff0c;例如STM32、GD32等。 准备开发板&#xff0c;用于硬件连接和实验。 准备必要的外围设备&#xff0c;如电源适配器、USB转串口模块等。 2. 软件环境搭建 安装编程语言环境&#xff0c;如C/C编译…

SpringBoot配置第三方专业缓存技术Memcached 下载 安装 整合测试 2024年5000字详解

Memcached下载和安装 是一个国内使用量还是比较大的技术 打开文件夹 我们需要在命令行窗口启动 注意要以管理员方式运行 先尝试进入指定文件 然后又再次运行 下载 memcached.exe -d install 启动 memcached.exe -d start 停止 memcached.exe -d stop memcached.exe -d i…

springboot原理篇-bean管理

springboot原理篇-bean管理&#xff08;二&#xff09; 我们今天主要学习IOC容器中Bean的其他使用细节&#xff0c;主要学习以下三方面&#xff1a; 如何从IOC容器中手动的获取到bean对象bean的作用域配置管理第三方的bean对象 一、获取Bean 了解即可&#xff0c;默认情况下…

1Mysql复习题

MySQL支持的日期类型&#xff1f; Date,DateTime,Timestamp,Time,Year 为表添加列的语法&#xff1f; alter table 表名 add column 列名 数据类型 修改表数据类型的语法是&#xff1f; Alter table 表名 modify 列名 新数据类型 更改表的列名的语法&#xff1f; Alter …

管理员如何踢掉登录用户?

这是 Spring Security 学习小组有小伙伴提的一个问题&#xff1a; 感觉这个问题还有点意思&#xff0c;拿出来和各位小伙伴一起分享下。 一 问题分析 首先大家注意限制条件&#xff1a;常规 Session 方案。 如果不是这几个字&#xff0c;这个问题根本就不是问题&#xff0c;…

git log 后一直出现:(冒号)

解决方法&#xff1a;键入“q” 参考git log 后一直出现:(冒号)的原因以及处理方法_git log 冒号怎么搜索-CSDN博客