当前位置: 首页 > news >正文

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}

相关文章:

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

说明&#xff1a;本文章是之前查到的一篇安卓版的&#xff0c;具体原文路径忘记了。稍微改了一点&#xff0c;挺符合业务使用的&#xff01; 一、看代码 /*** 包含数字的字符串进行比较&#xff08;按照从小到大排序&#xff09;*/private static Integer compareString(Stri…...

【Spring】springmvc如何处理接受http请求

目录 ​编辑 1. 背景 2. web项目和非web项目 3. 环境准备 4. 分析链路 5. 总结 1. 背景 今天开了一篇文章“SpringMVC是如何将不同的Request路由到不同Controller中的&#xff1f;”&#xff1b;看完之后突然想到&#xff0c;在请求走到mvc 之前服务是怎么知道有请求进来…...

2024年安全员-B证证模拟考试题库及安全员-B证理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年安全员-B证证模拟考试题库及安全员-B证理论考试试题是由安全生产模拟考试一点通提供&#xff0c;安全员-B证证模拟考试题库是根据安全员-B证最新版教材&#xff0c;安全员-B证大纲整理而成&#xff08;含2024年…...

redis过期淘汰策略、数据过期策略与持久化方式

redis的过期淘汰策略 redis过期淘汰策略有很多,默认是no-eviction 不删除任何数据,内存不足存入会直接报错,可以在redis配置文件中进行设置,其中有两个非常重要的概念,LRU与LFU LRU表示最近最少使用,LFU为最少频率使用 又按照volatile已设置过期时间的数据集和allkeys所有数…...

Oracle Vagrant Box 扩展根文件系统

需求 默认的Oracle Database 19c Vagrant Box的磁盘为34GB。 最近在做数据库升级实验&#xff0c;加之导入AWR dump数据&#xff0c;导致空间不够。 因此需要对磁盘进行扩容。 扩容方法1&#xff1a;预先扩容 此方法参考文档Vagrant, how to specify the disk size?。 指…...

TDengine用户权限管理

Background 官方文档关于用户管理没有很详细的介绍&#xff0c;只有零碎的几条&#xff0c;这里记录下方便后面使用。官方文档&#xff1a;https://docs.taosdata.com/taos-sql/show/#show-users 1、查看用户 show users;super 1&#xff0c;表示超级用户权限 0&#xff0c;表…...

推荐一款开源的跨平台划词翻译和OCR翻译软件:Pot

Pot简介 一款开源的跨平台划词翻译和OCR翻译软件 下载安装指南 根据你的机器型号下载对应版本&#xff0c;下载完成后双击安装即可。 使用教程 Pot具体功能如下&#xff1a; 划词翻译输入翻译外部调用鼠标选中需要翻译的文本&#xff0c;按下设置的划词翻译快捷键即可按下输…...

spring boot学习第十一篇:发邮件

1、pom.xml文件内容如下&#xff08;是我所有学习内容需要的&#xff0c;不再单独分出来&#xff0c;包不会冲突&#xff09;&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"…...

Linux中ps/kill/execl的使用

ps命令&#xff1a; ps -aus或者ps -ajx或者 ps -ef可以查看有哪些进程。加上 | grep "xxx" 可以查看名为”xxx"的进程。 ps -aus | grep "xxx" kill命令&#xff1a; kill -9 pid 杀死某个进程 kill -l 查看系统有哪些信号 execl函数&#…...

【web前端开发】HTML及CSS简单页面布局练习

案例一 网页课程 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-wi…...

2.7日学习打卡----初学RabbitMQ(二)

2.7日学习打卡 JMS 由于MQ产品很多&#xff0c;操作方式各有不同&#xff0c;于是JAVA提供了一套规则 ——JMS&#xff0c;用于操作消息中间件。JMS即Java消息服务 &#xff08;JavaMessage Service&#xff09;应用程序接口&#xff0c;是一个Java平台中关于面 向消息中间件的…...

【工作学习 day04】 9. uniapp 页面和组件的生命周期

问题描述 uniapp常用的有&#xff1a;页面和组件&#xff0c;并且页面和组件各自有各自的生命周期函数&#xff0c;那么在页面/组件请求数据时&#xff0c;是用created呢&#xff0c;还是用onLoad呢&#xff1f; 先说结论: 组件使用组件的生命周期&#xff0c;页面使用页面的…...

Mysql-数据库优化-客户端连接参数

客户端参数 原文地址 # 连接池配置 # 初始化连接数 spring.datasource.druid.initial-size1 # 最小空闲连接数&#xff0c;一般设置和initial-size一致 spring.datasource.druid.min-idle1 # 最大活动连接数&#xff0c;一个数据库能够支撑最大的连接数是多少呢&#xff1f; …...

【十二】【C++】vector用法的探究

vector类创建对象 /*vector类创建对象*/ #if 1 #define _CRT_SECURE_NO_WARNINGS#include <iostream> using namespace std; #include <vector> #include <algorithm> #include <crtdbg.h>class Date {public:Date(int year 1900, int month 1, int …...

Docker 基本介绍

Docker 基本介绍 镜像 Docker镜像就是一个只读的模板。 例如&#xff1a;一个镜像可以包含一个完整的ubuntu操作系统环境&#xff0c;里面仅安装了Apache或用户需要的其它应用 程序。 镜像可以用来创建Docker容器。Docker提供了一个很简单的机制来创建镜像或者更新现有的镜…...

CentOS 7 安装 install abiword

安装 1.下载noarch安装包 wget http://repo.iotti.biz/CentOS/7/noarch/lux-release-7-1.noarch.rpm 2.安装noarch rpm -Uvh lux-release-7-1.noarch.rpm 3.安装abiword yum -y install abiword...

开源的直播平台

​​​​​​直播平台系统界面介绍 开源一套直播平台 私信可获取源码...

ChatGPT 变懒最新解释!或和系统Prompt太长有关

大家好我是二狗。 ChatGPT变懒这件事又有了最新解释了。 这两天&#xff0c;推特用户Dylan Patel发文表示&#xff1a; 你想知道为什么 ChatGPT 和 6 个月前相比会如此糟糕吗&#xff1f; 那是因为ChatGPT系统Prompt是竟然包含1700 tokens&#xff0c;看看这个prompt里面有多…...

书生·浦语大模型第三课作业

基础作业&#xff1a; 复现课程知识库助手搭建过程 (截图) 进阶作业&#xff1a; 选择一个垂直领域&#xff0c;收集该领域的专业资料构建专业知识库&#xff0c;并搭建专业问答助手&#xff0c;并在 OpenXLab 上成功部署&#xff08;截图&#xff0c;并提供应用地址&#x…...

【Redis笔记】分布式锁及4种常见实现方法

线程锁 主要用来给方法、代码块加锁。当某个方法或代码使用锁&#xff0c;在同一时刻仅有一个线程执行该方法或该代码段。线程锁只在同一JVM中有效果&#xff0c;因为线程锁的实现在根本上是依靠线程之间共享内存实现的&#xff0c;比如Synchronized、Lock等。 进程锁 控制同…...

C加加开发者如何通过Taotoken快速接入多模型API服务

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 C开发者如何通过Taotoken快速接入多模型API服务 1. 场景与需求 在C后端服务中集成大模型能力时&#xff0c;开发者常面临几个实际…...

长期使用Taotoken对接各类工具后的稳定性综合观感

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 长期使用Taotoken对接各类工具后的稳定性综合观感 作为一名长期将大模型能力集成到日常开发与自动化流程中的开发者&#xff0c;我…...

基于CircuitPython与LED Animation库的NeoPixel蓝牙动态灯光系统

1. 项目概述与核心价值如果你玩过微控制器&#xff0c;尤其是像Adafruit的Circuit Playground Bluefruit这类功能丰富的开发板&#xff0c;那你肯定对板载的那一圈NeoPixel RGB LED灯珠印象深刻。它们不只是几个简单的指示灯&#xff0c;而是一个完整的、可编程的彩色光带。但很…...

CursorTouch/Operator-Use:融合光标与触摸的交互范式设计与实现

1. 项目概述&#xff1a;从“CursorTouch”到“Operator-Use”的交互范式演进最近在琢磨一个挺有意思的交互设计项目&#xff0c;我把它暂命名为“CursorTouch/Operator-Use”。这个名字听起来有点技术范儿&#xff0c;但核心想解决的问题其实很接地气&#xff1a;我们如何让电…...

Vue绘图神器:vue-drawing-canvas让前端绘图开发变得简单快速

Vue绘图神器&#xff1a;vue-drawing-canvas让前端绘图开发变得简单快速 【免费下载链接】vue-drawing-canvas VueJS Component for drawing on canvas. 项目地址: https://gitcode.com/gh_mirrors/vu/vue-drawing-canvas 在当今Web开发中&#xff0c;绘图功能已成为许多…...

Rust实现PDF解析与渲染:pdf_oxide库的安全高性能实践

1. 项目概述&#xff1a;当Rust遇上PDF&#xff0c;一场性能与安全的革命如果你在Rust社区或者高性能数据处理领域待过一阵子&#xff0c;大概率听说过或用过pdf_oxide这个库。乍一看&#xff0c;它只是GitHub上一个名为yfedoseev/pdf_oxide的仓库&#xff0c;一个用纯Rust编写…...

开源监控工具Argus:轻量级实时监控与告警系统实践指南

1. 项目概述&#xff1a;一个专注于实时监控与告警的开源利器最近在梳理团队内部的监控告警体系时&#xff0c;我又重新审视了市面上的一些开源方案。除了大家耳熟能详的PrometheusGrafanaAlertmanager组合&#xff0c;一个名为argus的项目引起了我的注意。这个由tmdgusya维护的…...

通信中间件dlz.comm架构解析:从核心原理到高性能实践

1. 项目概述&#xff1a;一个通信中间件的诞生最近在重构一个分布式数据处理系统时&#xff0c;我又一次被底层通信的复杂性绊住了。不同的服务节点之间&#xff0c;数据包的序列化、网络传输、连接管理、异常处理……这些代码像藤蔓一样缠绕在业务逻辑里&#xff0c;每次增加一…...

绍兴geo优化:亲测高性价比公司分享

绍兴GEO优化&#xff1a;亲测高性价比公司分享 随着AI搜索流量占比持续攀升&#xff0c;绍兴企业正面临传统推广方式成本高、效率低的挑战。在这样的背景下&#xff0c;GEO&#xff08;地理围栏优化&#xff09;技术成为了提高本地精准流量获取的关键手段。本文基于最新的调研…...

ARM GICv3虚拟中断控制器与ICV_IGRPEN0_EL1寄存器解析

1. ARM GICv3虚拟中断控制器架构概述在现代处理器架构中&#xff0c;中断控制器是连接外设与CPU的关键枢纽。ARM架构的通用中断控制器(GIC)经过多代演进&#xff0c;GICv3架构在虚拟化支持方面实现了重大突破。作为第三代中断控制器&#xff0c;GICv3不仅继承了前代产品的优势特…...