java 混合排序_字母、数字混合方式,按照自然语言排序,java版
public static int atoi(String str) {
//这里要小心,需要判断有效性
if (str == null || str.length() == 0) {
return 0;
}
int nlen = str.length();
double sum = 0;
int sign = 1;
int j = 0;
//剔除空格
while (str.charAt(j) == ' ') {
j++;
}
//判断正数和负数
if (str.charAt(j) == '+') {
sign = 1;
j++;
} else if (str.charAt(j) == '-') {
sign = -1;
j++;
}
for (int i = j; i < nlen; i++) {
char current = str.charAt(i);
if (current >= '0' && current <= '9') {
sum = sum * 10 + (int) (current - '0');
} else {
break;//碰到非数字,退出转换
}
}
sum = sum * sign;
//这里要小心,需要判断范围
if (sum > Integer.MAX_VALUE) {
sum = Integer.MAX_VALUE;
} else if (sum < Integer.MIN_VALUE) {
sum = Integer.MIN_VALUE;
}
return (int) sum;
}
/**
* 按照自然语言顺序排序
*
* @param list
*/
public static void naturalSort(Listlist) {
Collections.sort(list, (o1, o2) -> {
int i = 0, j = 0;
String temp1, temp2;
int num1, num2;
int length = Math.min(o1.length(), o2.length());
while (i < length && j < length) {
temp1 = "";
temp2 = "";
if (o1.charAt(i) > '9' || o1.charAt(i) < '0' || o2.charAt(j) > '9' || o2.charAt(j) < '0') {
if (o1.charAt(i) == o2.charAt(j)) {
i++;
j++;
continue;
} else if (o1.charAt(i) > o2.charAt(j)) {
return 1;
} else {
return -1;
}
}
while (i < o1.length() && o1.charAt(i) <= '9' && o1.charAt(i) >= '0') {
temp1 += o1.charAt(i);
i++;
}
while (j < o2.length() && o2.charAt(j) <= '9' && o2.charAt(j) >= '0') {
temp2 += o2.charAt(j);
j++;
}
num1 = atoi(temp1);
num2 = atoi(temp2);
if (num1 == num2) {
if (temp1.length() < temp2.length()) {
return 1;
} else if (temp1.length() > temp2.length()) {
return -1;
} else {
continue;
}
} else if (num1 > num2) {
return 1;
} else {
return -1;
}
}
return o1.length() > o2.length() ? 1 : -1;
});
}
public static void main(String[] args) {
Listlist = Arrays.asList("IM0.dcm", "IM1.dcm", "IM10.dcm", "IM11.dcm", "IM2.dcm", "IM20.dcm");
naturalSort(list);
System.out.println(list);
}
运行结果:
java 混合排序_字母、数字混合方式,按照自然语言排序,java版相关推荐
- 算法--排序--大小写字母数字分离(桶排序思想)
题目: 对D,a,F,B,c,A,z这个字符串进行排序,要求将其中所有小写字母都排在大写字母的前面,但小写字母内部和大写字母内部不要求有序.比如经过排序之后为a,c,z,D,F,B,A,这个如何来实现 ...
- sql怎么实现线性排序_如何在SQL中实现排序间接
sql怎么实现线性排序 我最近偶然发现了一个有趣的Stack Overflow问题 ,该问题本质上是用户希望确保以明确定义的顺序交付结果记录. 他们写 SELECT name FROM product ...
- java正则表达式 字母数字下划线_字母数字下划线常用正则表达式
1.由数字.26个英文字母或者下划线组成的字符串: ^[0-9a-zA-Z_]{1,}$ 2.非负整数(正整数 + 0 ): ^/d+$ 3. 正整数: ^[0-9]*[1-9][0-9]*$ 4.非 ...
- list按照某个字段排序_恕我直言你可能真的不会java第7篇:像使用SQL一样排序集合
在开始之前,我先卖个关子提一个问题:我们现在有一个Employee员工类. @Data @AllArgsConstructor public class Employee {private Integ ...
- 7-4 电话键盘字母数字转换 (20 分) PTA JAVA
7-4 电话键盘字母数字转换 (20 分) 国际标准中电话键盘上字母和数字之间的对应关系如下图所示. 电话键盘字母数字转换.jpg 编写一个程序,从键盘读入一个输入的字母,将其转换成所对应的数字. 输 ...
- 排序算法java 简书_史上最全经典排序算法总结(Java实现)
查找和排序算法是算法的入门知识,其经典思想可以用于很多算法当中.因为其实现代码较短,应用较常见.所以在面试中经常会问到排序算法及其相关的问题.但万变不离其宗,只要熟悉了思想,灵活运用也不是难事.一般在 ...
- kotlin与java混合开发_使用kotlin和Java混合开发Android项目爬坑记录
使用kotlin和Java混合开发Android项目爬坑记录 不定期将开发过程中遇到的问题添加在此处,加深记忆. 主要内容包括但不限于java与kotlin语言的一些区别,以及在使用android-s ...
- java混合分页_坑,MySQL中 order by 与 limit 混用,分页会出现问题!
在Mysql中我们常常用order by来进行排序,使用limit来进行分页,当需要先排序后分页时我们往往使用类似的写法select * from 表名 order by 排序字段 limt M,N. ...
- python java混合编程_详解java调用python的几种用法(看这篇就够了)
java调用python的几种用法如下: 在java类中直接执行python语句 在java类中直接调用本地python脚本 使用Runtime.getRuntime()执行python脚本文件(推荐 ...
- c++ 不插入重复元素但也不排序_面试时写不出排序算法?看这篇就够了
小Hub领读: 本文主要详细讲述常见的八种排序算法的思想.实现以及复杂度.包括冒泡排序.快速排序.插入排序.希尔排序等等,文章讲解非常详细! 作者:静默虚空 https://juejin.im/pos ...
最新文章
- Android 5.0新特性ToolBar
- 腾讯基于 Flink 的实时流计算平台演进之路
- 关于sendinput() inserted only 0 out of 2 python程序问题的解决
- 爬虫进行request请求时User-Agent怎样写
- 神策数据王灼洲:如何进行有效的数据治理,提升数据价值?
- 白色flash模块代码_适用于MCU项目的代码框架BabyOS,工程师的好助手!
- java龟兔赛跑设计思路_JAVA程序设计(09)-----面对对象设计初级应用 龟兔赛跑
- 使用默认方法的界面演变–第一部分:方法
- 操作系统上机题目(多线程1)
- mysql性能优化 硬件优化_mysql性能优化学习笔记(6)数据库配置优化硬件优化...
- linux添加物理卷编辑文件夹,Red hat Linux下的逻辑卷管理器LVM-上
- 爬虫所需准备知识 0221
- es6 async函数的异步迭代器
- WordPress的MySQL宕_wordpress数据库mysql使用phpmyadmin打开数据表,提示table “xxx” doesn`t exist...
- Asymptotic I Catalan Number
- Gale-Shapley算法(基于python3.6)
- 什么是差模干扰和共模干扰?
- 金蝶K3添加触发器实现-生产领料单打印即时库存
- python 数据库表结构转为类_Python sql server和postgresql的表结构转换
- 我叫MT4怎么在电脑上玩?我叫MT4手游安卓模拟器电脑版操作教程