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版相关推荐

  1. 算法--排序--大小写字母数字分离(桶排序思想)

    题目: 对D,a,F,B,c,A,z这个字符串进行排序,要求将其中所有小写字母都排在大写字母的前面,但小写字母内部和大写字母内部不要求有序.比如经过排序之后为a,c,z,D,F,B,A,这个如何来实现 ...

  2. sql怎么实现线性排序_如何在SQL中实现排序间接

    sql怎么实现线性排序 我最近偶然发现了一个有趣的Stack Overflow问题 ,该问题本质上是用户希望确保以明确定义的顺序交付结果记录. 他们写 SELECT name FROM product ...

  3. java正则表达式 字母数字下划线_字母数字下划线常用正则表达式

    1.由数字.26个英文字母或者下划线组成的字符串: ^[0-9a-zA-Z_]{1,}$ 2.非负整数(正整数 + 0 ): ^/d+$ 3. 正整数: ^[0-9]*[1-9][0-9]*$ 4.非 ...

  4. list按照某个字段排序_恕我直言你可能真的不会java第7篇:像使用SQL一样排序集合

    在开始之前,我先卖个关子提一个问题:我们现在有一个Employee员工类. @Data @AllArgsConstructor public class Employee {private Integ ...

  5. 7-4 电话键盘字母数字转换 (20 分) PTA JAVA

    7-4 电话键盘字母数字转换 (20 分) 国际标准中电话键盘上字母和数字之间的对应关系如下图所示. 电话键盘字母数字转换.jpg 编写一个程序,从键盘读入一个输入的字母,将其转换成所对应的数字. 输 ...

  6. 排序算法java 简书_史上最全经典排序算法总结(Java实现)

    查找和排序算法是算法的入门知识,其经典思想可以用于很多算法当中.因为其实现代码较短,应用较常见.所以在面试中经常会问到排序算法及其相关的问题.但万变不离其宗,只要熟悉了思想,灵活运用也不是难事.一般在 ...

  7. kotlin与java混合开发_使用kotlin和Java混合开发Android项目爬坑记录

    使用kotlin和Java混合开发Android项目爬坑记录 不定期将开发过程中遇到的问题添加在此处,加深记忆. 主要内容包括但不限于java与kotlin语言的一些区别,以及在使用android-s ...

  8. java混合分页_坑,MySQL中 order by 与 limit 混用,分页会出现问题!

    在Mysql中我们常常用order by来进行排序,使用limit来进行分页,当需要先排序后分页时我们往往使用类似的写法select * from 表名 order by 排序字段 limt M,N. ...

  9. python java混合编程_详解java调用python的几种用法(看这篇就够了)

    java调用python的几种用法如下: 在java类中直接执行python语句 在java类中直接调用本地python脚本 使用Runtime.getRuntime()执行python脚本文件(推荐 ...

  10. c++ 不插入重复元素但也不排序_面试时写不出排序算法?看这篇就够了

    小Hub领读: 本文主要详细讲述常见的八种排序算法的思想.实现以及复杂度.包括冒泡排序.快速排序.插入排序.希尔排序等等,文章讲解非常详细! 作者:静默虚空 https://juejin.im/pos ...

最新文章

  1. Android 5.0新特性ToolBar
  2. 腾讯基于 Flink 的实时流计算平台演进之路
  3. 关于sendinput() inserted only 0 out of 2 python程序问题的解决
  4. 爬虫进行request请求时User-Agent怎样写
  5. 神策数据王灼洲:如何进行有效的数据治理,提升数据价值?
  6. 白色flash模块代码_适用于MCU项目的代码框架BabyOS,工程师的好助手!
  7. java龟兔赛跑设计思路_JAVA程序设计(09)-----面对对象设计初级应用 龟兔赛跑
  8. 使用默认方法的界面演变–第一部分:方法
  9. 操作系统上机题目(多线程1)
  10. mysql性能优化 硬件优化_mysql性能优化学习笔记(6)数据库配置优化硬件优化...
  11. linux添加物理卷编辑文件夹,Red hat Linux下的逻辑卷管理器LVM-上
  12. 爬虫所需准备知识 0221
  13. es6 async函数的异步迭代器
  14. WordPress的MySQL宕_wordpress数据库mysql使用phpmyadmin打开数据表,提示table “xxx” doesn`t exist...
  15. Asymptotic I Catalan Number
  16. Gale-Shapley算法(基于python3.6)
  17. 什么是差模干扰和共模干扰?
  18. 金蝶K3添加触发器实现-生产领料单打印即时库存
  19. python 数据库表结构转为类_Python sql server和postgresql的表结构转换
  20. 我叫MT4怎么在电脑上玩?我叫MT4手游安卓模拟器电脑版操作教程

热门文章

  1. python socket coding
  2. Mysql+MHA高可用集群
  3. nodejs源码—初始化
  4. [爬虫学习笔记]C# 使用 ScrapySharp 并行下载天涯图片
  5. 编程学习初体验(4. 编程的核心)
  6. 小功告成:ReadIE beta
  7. [国家集训队]墨墨的等式
  8. iview实现国际化
  9. Ubuntu18.04 VMtools的安装与卸载
  10. UVa 11100 旅行2007