Java字符串(包含字母和数字)通用排序

说明:本文章是之前查到的一篇安卓版的,具体原文路径忘记了。稍微改了一点,挺符合业务使用的!

一、看代码

/*** 包含数字的字符串进行比较(按照从小到大排序)*/private static Integer compareString(String string1, String string2) {//拆分两个字符串List<String> list1 = splitString(string1);List<String> list2 = splitString(string2);//依次对比拆分出的每个值int index = 0;while (true) {//相等表示两个字符串完全相等if (index >= Math.max(list1.size(), list2.size())) {return 0;}String str1 = null;if (index < list1.size()){str1 = list1.get(index);}else{str1 =  "";}String str2 = null;if (index < list2.size()){str2 = list2.get(index);}else{str2 =  "";}//字符串相等则继续判断下一组数据if (str1.equals(str2)) {index++;continue;}//是纯数字,比较数字大小if (isNum(str1) && isNum(str2)) {if(Integer.parseInt(str1) < Integer.parseInt(str2)){return -1;}else{return 1;}}// 字符串比较大小if(str1.compareTo(str2)>0){return -1;}else{return 1;}}}
/*** 是否是纯数字*/private static Boolean isNum(String str){return Pattern.compile("\\d+").matcher(str).matches();}
/*** 拆分字符串* 输入:第5章第100节课* 返回:[第,5,章第,100,节课]*/private static List<String> splitString(String str){Matcher matcher = Pattern.compile("([^0-9]+)|(\\d+)").matcher(str);List<String> list = new ArrayList<>();while (matcher.find()) {list.add(matcher.group());}return list;}

二、看测试

List<String> strList0 = Arrays.asList(new String[]{"4","2","5","1"});Collections.sort(strList0,(o1, o2) -> compareString(o1, o2));System.out.println(Arrays.asList(strList0));// 输出:[[1, 2, 4, 5]]List<String> strList1 = Arrays.asList(new String[]{"GSM 1900","GSM 1800","GSM 850","GSM 900"});Collections.sort(strList1,(o1, o2) -> compareString(o1, o2));System.out.println(Arrays.asList(strList1));// 输出:[[GSM 850, GSM 900, GSM 1800, GSM 1900]]List<String> strList2 = Arrays.asList(new String[]{"6G","2.4G","5G"});Collections.sort(strList2,(o1, o2) -> compareString(o1, o2));System.out.println(Arrays.asList(strList2));// 输出:[[2.4G, 5G, 6G]]List<String> strList3 = Arrays.asList(new String[]{"n78","DC_12A_n2A","n8","DC_66A_n2A","DC_1A_n77A","DC_2A_n41A"});Collections.sort(strList3,(o1, o2) -> compareString(o1, o2));System.out.println(Arrays.asList(strList3));// 输出:[n8, n78, DC_1A_n77A, DC_2A_n41A, DC_12A_n2A, DC_66A_n2A]]

三、对象测试

@Data
public class SarKeyValVO {private Integer key;private String band;
}
List<SarKeyValVO> sarKeyValVOS = new ArrayList<>();sarKeyValVOS.add(new SarKeyValVO(0,"GSM 1900"));sarKeyValVOS.add(new SarKeyValVO(1,"GSM 1800"));sarKeyValVOS.add(new SarKeyValVO(2,"GSM 850"));sarKeyValVOS.add(new SarKeyValVO(3,"GSM 900"));List<SarKeyValVO> collect = sarKeyValVOS.stream().sorted((o1, o2) -> compareString(o1.getBand(), o2.getBand())).collect(Collectors.toList());System.out.println(Arrays.asList(collect));// {...GSM 850}, {...GSM 900}, {...GSM 1800}, {...GSM 1900}

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

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

相关文章

Character包装类常用方法(Java)

Character包装类常用方法 Character 类是 char 基本数据类型的包装类&#xff0c;用于提供对字符数据的操作和封装。 1. isDigit(char ch) 方法示例&#xff1a; 判断指定字符是否是一个数字&#xff08;0-9&#xff09;。返回值为 boolean 类型。 char ch1 5; char ch2 …

时序预测 | MATLAB实现基于CNN-LSTM-AdaBoost卷积长短期记忆网络结合AdaBoost时间序列预测

时序预测 | MATLAB实现基于CNN-LSTM-AdaBoost卷积长短期记忆网络结合AdaBoost时间序列预测 目录 时序预测 | MATLAB实现基于CNN-LSTM-AdaBoost卷积长短期记忆网络结合AdaBoost时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现基于CNN-LST…

vue3 之 商城项目—layout静态模版结构搭建

layout—模块静态模版搭建 一般情况下我们会有nav区域&#xff0c;header区域&#xff0c;二级路由出口区域以及footer区域&#xff0c;如图 我们在开发的时候先把大模块搭建起来&#xff0c;再一步一步填充小模块 在layout下建文件&#xff0c;目录如下 在index.vue中把上…

基于springboot+vue+mysql员工宿舍管理系统

技术栈 jdk8springboot vueelement-plusMySQL 包含功能点 管理员端 登录员工管理宿舍管理留言板管理物品报修管理公告管理 员工端 登录首页个人中心物品报修留言板 功能截图(部分) 管理员 管理员登录 员工管理 宿舍管理 物品报修管理 公告管理 留言管理 员工 员工登录…

数据库管理-第145期 最强Oracle监控EMCC深入使用-02(20240205)

数据库管理145期 2024-02-05 数据库管理-第145期 最强Oracle监控EMCC深入使用-02&#xff08;20240205&#xff09;1 监控方式2 度量配置3 阻塞4 DG监控总结 数据库管理-第145期 最强Oracle监控EMCC深入使用-02&#xff08;20240205&#xff09; 作者&#xff1a;胖头鱼的鱼缸&…

LeetCode、216. 组合总和 III【中等,组合型枚举】

文章目录 前言LeetCode、216. 组合总和 III【中等&#xff0c;组合型枚举】题目类型与分类思路 资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝2W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质作者、专注于Java后端技术领域。 涵盖…

769933-15-5,Biotin aniline,用来标记和检测细胞膜上的特定蛋白质

您好&#xff0c;欢迎来到新研之家 文章关键词&#xff1a;769933-15-5&#xff0c;Biotin aniline&#xff0c;生物素苯胺 一、基本信息 产品简介&#xff1a;Biotin aniline, also known as Biotin aniline, is a molecular probe with strong reactivity. Its uniqueness…

Java设计模式-责任链模式

责任链模式 一、概述二、结构三、案例实现四、优缺点五、源码解析 一、概述 在现实生活中&#xff0c;常常会出现这样的事例&#xff1a;一个请求有多个对象可以处理&#xff0c;但每个对象的处理条件或权限不同。例如&#xff0c;公司员工请假&#xff0c;可批假的领导有部门…

c# List集合操作帮助类

public class ListHelper { #region 赋值转换 /// <summary> /// A实体转换成B实体 /// </summary> /// <typeparam name"T"></typeparam> /// <typeparam name"K"></typep…

代码随想录-背包问题

01 背包 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品只能用一次&#xff0c;求解将哪些物品装入背包里物品价值总和最大。 二维dp数组01背包 定义&#xff1a;dp[i][j] 表示从下标为[0-i]的物品里任意取…

TreeSet 集合

TreeSet 集合 1. 概述2. 方法3. 遍历方式4. 两种排序方式4.1 默认排序规则/自然排序4.1.1 概述4.1.2 compareTo()方法4.1.3 代码示例14.1.4 代码示例2 4.2 比较器排序4.2.1 概述4.2.2 compare()方法4.2.3 代码示例14.2.4 代码示例2 4.3 排序方式的对比 5. 注意事项 文章中的部分…

LeetCode、62.不同路径的数目(一)【简单,动态规划或递归】

文章目录 前言LeetCode、62.不同路径的数目(一)【简单&#xff0c;动态规划或递归】题目描述与分类思路思路1&#xff1a;动态规划思路2&#xff1a;递归实现简洁写法补充&#xff1a;2024.1.30 资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝2W&#xff0c;csdn博客专家、…

程序员好用的软件/网页推荐

桌面&#xff1a;编程&#xff1a; VsCode 插件&#xff1a;python、通义灵码 写文章&#xff1a; PDF公式转MarkDown&#xff1a;https://mathpix.com/snipping-tool 欢迎推荐&#xff0c;持续更新

containerd中文翻译系列(六)内容流

内容流 containerd 的一个主要目标是创建一个可将内容用于执行容器的系统。 为了执行该流程&#xff0c;containerd 需要内容并对其进行管理。 本文档描述了内容如何流入 containerd、如何对其进行管理&#xff0c;以及在此过程中的每个阶段它存在于何处。 我们以从已知镜像 …

自学Java的第二十天

一&#xff0c;每日收获 1.使用方式 1: 动态初始化 2.使用方式 2: 动态初始化 3.使用方式 3: 动态初始化-列数不确定 4.使用方式 4: 静态初始化 5.二维数组的应用案例 6.二维数组使用细节和注意事项 二&#xff0c;新名词与小技巧 三&#xff0c;今天学习中所遇到的困难…

代理与Reflect反射

属性描述符 Proprety Descriptor 属性描述符 用于描述一个属性的相关信息 1.Object.getOwnPropertyDescriptor(对象&#xff0c;属性名) 可以得到一个对象的 某个属性的属性描述符 Object.getOwnPropertyDescriptors(对象) 可以得到某个对象的所有属性描述符 如果需要为某个…

(已解决)vue+element-ui实现个人中心,仿照原神

差一个个人中心页面&#xff0c;看到了这个博主的个人中心&#xff0c;真的很不错 地址&#xff1a;vueelement仿原神实现好看的个人中心 最终效果&#xff1a;

TypeScript快速入门 - 函数的使用

1、有名函数和匿名函数 // 有名函数,形参设置为number类型,返回值也为number类型 function add(x: number, y: number): number {return x y; } console.log(add(1, 2)); // 3//匿名函数,形参设置为number类型,返回值也为number类型 let myAdd function (x: number, y: numb…

【多模态MLLMs+图像编辑】MGIE:苹果开源基于指令和大语言模型的图片编辑神器(24.02.03开源)

项目主页&#xff1a;https://mllm-ie.github.io/ 论文 :基于指令和多模态大语言模型图片编辑 2309.Guiding Instruction-based Image Editing via Multimodal Large Language Models &#xff08;加州大学圣巴拉分校苹果&#xff09; 代码&#xff1a;https://github.com/appl…

rtt设备驱动框架学习-spi总线和设备

1.spi总线 spi总线分为硬件spi总线和软件模拟spi总线。 按照面向对象的思想&#xff0c;要抽象出硬件spi总线和软件spi总线的相同点和不同点。相同点就变成了spi总线基类&#xff0c;不同点就是各个子类的私有特性。 rtt就是这么干的&#xff0c;共同点是什么&#xff1f;方法…