java 给乱序字符串进行排序
2021/9/23 20:12:58
本文主要是介绍java 给乱序字符串进行排序,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
工作中遇到了批量选择了几条数据进行保存,但数据本身是有序号的(序号及其复杂并且没有规律),保存完以后就乱序了。
在没有设置权重的情况下,对这些数据进行排序就比较麻烦了。
在此,我想到了利用正则表达式进行对序号的识别并截取,然后通过重写排序方法进行排序。
// 乱序数据 String content0 = "1.13 nex1sdnvaeye啊啊啊"; String content1 = "第2.11条 .nexdnaeye"; String content2 = "3-13 nex34tsdnjavaeye"; String content3 = "第3.14条 necsdn2ae啊ye"; String content4 = "3.点.lov是e31 nex35tsdnjavaeye"; List<String> list = new ArrayList<>(); list.add(content4); list.add(content0); list.add(content3); list.add(content1); list.add(content2); System.out.println(list); // 输出后的内容 // [3.点.lov是e31 nex35tsdnjavaeye, 1.13 nex1sdnvaeye啊啊啊, 第3.14条 necsdn2ae啊ye, 第2.11条 .nexdnaeye, 3-13 nex34tsdnjavaeye] |
方案一:对乱序数据中,有迹可循的序号进行正则表达式的截取。
public static String getStartDigits(String s) { // 发现,数据中是含有“-”(横杠)的,所以要先把“-”转为“.” ,让其变为浮点数,来进行比较。 String str = s.replace("-", "."); // 然后通过正则来逐个匹配浮点数,浮点数缺少小数位的数,整数。 Matcher matcher; if (str.contains(".")){ matcher = Pattern.compile("(\\d[.]\\d)").matcher(str); if (matcher.find()){ return matcher.group(0); } else { matcher = Pattern.compile("(\\d[.])").matcher(str); return matcher.find()? matcher.group(0): "0"; } } else { matcher = Pattern.compile("\\d").matcher(str); return matcher.find()? matcher.group(0): "0"; } } // 注:如果匹配不成功,返回0; 对无法识别的复杂字符串,排序之后会置前。 |
方案二:对排序进行重写
public static void setSortByStartDigits(List<String> list) { list.sort((s1, s2) -> { double num1 = Double.parseDouble(getStartDigits(s1)); double num2 = Double.parseDouble(getStartDigits(s2)); return num1 - num2 > 0 ? 1 : -1; }); } |
实践:
public static void main(String[] args) { String content0 = "1.13 nex1sdnvaeye啊啊啊"; String content1 = "第2.11条 .nexdnaeye"; String content2 = "3-13 nex34tsdnjavaeye"; String content3 = "第3.14条 necsdn2ae啊ye"; String content4 = "3.点.lov是e31 nex35tsdnjavaeye"; List<String> list = new ArrayList<>(); list.add(content4); list.add(content0); list.add(content3); list.add(content1); list.add(content2); // 调用排序方法 StringSortUtil.setSortByStartDigits(list); System.out.println(list); } // 输出内容 // [1.13 nex1sdnvaeye啊啊啊, 第2.11条 .nexdnaeye, 3.点.lov是e31 nex35tsdnjavaeye, 3-13 nex34tsdnjavaeye, 第3.14条 necsdn2ae啊ye] |
完整工具类:
/* * 字符串集合排序工具 */ public class StringSortUtil { // 取出字符串前面的数字 public static String getStartDigits(String s) { String str = s.replace("-", "."); Matcher matcher; if (str.contains(".")){ matcher = Pattern.compile("(\\d[.]\\d)").matcher(str); if (matcher.find()){ return matcher.group(0); } else { matcher = Pattern.compile("(\\d[.])").matcher(str); return matcher.find()? matcher.group(0): "0"; } } else { matcher = Pattern.compile("\\d").matcher(str); return matcher.find()? matcher.group(0): "0"; } } // 功能描述: 根据字符串集合中开头的序号进行排序(支持double) public static void setSortByStartDigits(List<String> list) { list.sort((s1, s2) -> { double num1 = Double.parseDouble(getStartDigits(s1)); double num2 = Double.parseDouble(getStartDigits(s2)); return num1 - num2 > 0 ? 1 : -1; }); } } |
这篇关于java 给乱序字符串进行排序的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-12百万架构师第十五课:源码分析:Spring 源码分析:SpringMVC核心原理及源码分析|JavaGuide
- 2025-01-11有哪些好用的家政团队管理工具?
- 2025-01-11营销人必看的GTM五个指标
- 2025-01-11办公软件在直播电商前期筹划中的应用与推荐
- 2025-01-11提升组织效率:上级管理者如何优化跨部门任务分配
- 2025-01-11酒店精细化运营背后的协同工具支持
- 2025-01-11跨境电商选品全攻略:工具使用、市场数据与选品策略
- 2025-01-11数据驱动酒店管理:在线工具的核心价值解析
- 2025-01-11cursor试用出现:Too many free trial accounts used on this machine 的解决方法
- 2025-01-11百万架构师第十四课:源码分析:Spring 源码分析:深入分析IOC那些鲜为人知的细节|JavaGuide