java实现List/Set集合排序:集合内容是字符串,字符串(包含汉字,英文字母,数字)集合的排序

工具类如下:

package com.acconsys.util;import java.util.Collections;
import java.util.List;public class CollectionCustomUtil {public static void sort(List<String> designNameList) {Collections.sort(designNameList, (str1, str2) -> {// 处理数据为null的情况if (str1 == null && str2 == null) {return 0;}if (str1 == null) {return -1;}if (str2 == null) {return 1;}// 比较字符串中的每个字符char c1;char c2;// 逐字比较返回结果for (int i = 0; i < str1.length(); i++) {c1 = str1.charAt(i);try {c2 = str2.charAt(i);} catch (StringIndexOutOfBoundsException e) { // 如果在该字符前,两个串都一样,str2更短,则str1较大return 1;}// 如果都是数字的话,则需要考虑多位数的情况,取出完整的数字字符串,转化为数字再进行比较if (Character.isDigit(c1) && Character.isDigit(c2)) {String numStr1 = "";String numStr2 = "";// 获取数字部分字符串for (int j = i; j < str1.length(); j++) {c1 = str1.charAt(j);if (!Character.isDigit(c1) && c1 != '.') { // 不是数字则直接退出循环break;}numStr1 += c1;}for (int j = i; j < str2.length(); j++) {c2 = str2.charAt(j);if (!Character.isDigit(c2) && c2 != '.') { // 考虑可能带小数的情况break;}numStr2 += c2;}// 转换成数字数组进行比较 适配 1.25.3.5 这种情况String[] numberArray1 = numberStrToNumberArray(numStr1);String[] numberArray2 = numberStrToNumberArray(numStr2);return compareNumberArray(numberArray1, numberArray2);}// 不是数字的比较方式if (c1 != c2) {return c1 - c2;}}return 0;});}/*** 数字字符串转数字数组* 适配 1.25.3.5 这种情况 ,同时如果不不包含小数点【整数情况】** @return*/public static String[] numberStrToNumberArray(String numberStr) {// 按小数点分割字符串数组String[] numberArray = numberStr.split("\\.");// 长度为0说明没有小数点,则整个字符串作为第一个元素if (numberArray.length == 0) {numberArray = new String[]{numberStr};}return numberArray;}/*** 比较两个数字数组** @param numberArray1* @param numberArray2* @return*/public static int compareNumberArray(String[] numberArray1, String[] numberArray2) {for (int i = 0; i < numberArray1.length; i++) {if (numberArray2.length < i + 1) { // 此时数字数组2比1短,直接返回return 1;}int compareResult = Integer.valueOf(numberArray1[i]).compareTo(Integer.valueOf(numberArray2[i]));if (compareResult != 0) {return compareResult;}}// 说明数组1比数组2短,返回小于return -1;}
}

java实现List/Set集合排序:集合内容是字符串,字符串(包含汉字,英文字母,数字)集合的排序相关推荐

  1. 金山笔试题-字符串排序 : 写一个函数,实现对给定的字符串(字符串里面包括:英文字母,数字,符号)的处理...

    写一个函数,实现对给定的字符串(字符串里面包括:英文字母,数字,符号)的处理.经过处理后的字符串其内容按字母,数字,符号的顺序存放.函数声明如下: void ParseString(char* pst ...

  2. JAVA输出字符串中字母_Java输出字符串中的大写英文字母数,小写英文字母数以及非英文字母的三种方法...

    import java.util.*; /** * 3.编写一个程序,输出一个字符串中的大写英文字母数,小写英文字母数以及非英文字母. 提示: 方法一:使用循环提取字符,判断字符是否在A-Z .a-z ...

  3. 【Python】对一个字符串中的所有英文字母进行排序

    题目 对一个字符串中的所有英文字母进行排序 栗子 字符串 a = 'hello word' 排序后结果: ['d', 'e', 'h', 'l', 'l', 'o', 'o', 'r', 'w'] c ...

  4. javascript-对混合字母/数字数组进行排序

    [A1, A10, A11, A12, A2, A3, A4, B10, B2, F1, F12, F3] 将其排序为: [A1, A2, A3, A4, A10, A11, A12, B2, B10 ...

  5. 2.04 对字母数字的混合排序

    问题:现有字母和数字混合的数据,希望按照数字或字符部分来排序.考虑这个视图: create view V as select concat(ename, ' ',deptno) from emp; m ...

  6. java大写英文字母_输出一个字符串中的大写英文字母数,小写英文字母数以及非英文字母(.java)...

    import java.util.Scanner; public class string1{ public static void main(String[] args){ String str; ...

  7. java 字符串 数字个数_JAVA 统计字符串中中文,英文,数字,空格的个数

    packagecom.example.test;public classCountCharacter {/**中文字符*/ private int chCharacter = 0;/**英文字符*/ ...

  8. java 数字 汉字_Java提取字符串中的汉字、字母、数字

    1.提取汉字 public static void main(String[] args) { String str = " 我是123一段测abd试 空a格 的字符 串 "; S ...

  9. cstring判断包含字符串_作为java程序员要知道的大厂常见的算法面试题:字符串的包含...

    1.2 字符串的包含 题目描述 给定一长字符串a和一短字符串b.请问,如何最快地判断出短字符串b中的所有字符是否都在长字符串a中?请编写函数bool StringContain(string & ...

最新文章

  1. 库克称苹果不会学脸书发行加密货币
  2. 电机串电阻会有什么影响?
  3. Java NIO系列教程(十一) Pipe
  4. 前端学习(1963)vue之电商管理系统电商系统之控制级联选择框的选择范围
  5. 下面选项中不是开发java程序的步骤是_Java基础试题及其答案2
  6. zabbix监控部署 与添加主机
  7. tmux常用命令(分屏工具)
  8. 使用gorilla/mux增强Go HTTP服务器的路由能力
  9. POJ 3630 Phone List [Trie]
  10. linux输出 /dev/null
  11. Spring 各种包功能
  12. CF1715D 2+ doors 题解
  13. 泛知识+社交搜索,快手平台内容生态知识普惠价值凸显
  14. OPENGL 半透明贴图
  15. LikeLib区块链底层公链技术应用
  16. 95文件及文件夹操作实践
  17. 利用jieba库对《秦吏》做的简单处理
  18. 第九十一章 SQL函数 LOWER
  19. GoLang各种库(转)
  20. kubelet 压力驱逐 - The node had condition:[DiskPressure]

热门文章

  1. B树的插入、删除操作
  2. spring security 自定义退出策略
  3. 基于双二阶广义积分器的软件锁相环仿真模型 DSOGI-SPLL 给出了不对称工况下的对比结果
  4. SSM 实训笔记 -10- 使用 sessionStorage 存储数据、js 图片验证码、登录加载动画
  5. 【实时PPP】对比CNES的实时数据流与CNT产品之间的差异
  6. 基于android的快递查询项目源码
  7. 7-2 LinkedList
  8. log4j日志设置保留天数
  9. BUCK电路全部外围参数计算公式
  10. java内存监控(上)