java实现List/Set集合排序:集合内容是字符串,字符串(包含汉字,英文字母,数字)集合的排序
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集合排序:集合内容是字符串,字符串(包含汉字,英文字母,数字)集合的排序相关推荐
- 金山笔试题-字符串排序 : 写一个函数,实现对给定的字符串(字符串里面包括:英文字母,数字,符号)的处理...
写一个函数,实现对给定的字符串(字符串里面包括:英文字母,数字,符号)的处理.经过处理后的字符串其内容按字母,数字,符号的顺序存放.函数声明如下: void ParseString(char* pst ...
- JAVA输出字符串中字母_Java输出字符串中的大写英文字母数,小写英文字母数以及非英文字母的三种方法...
import java.util.*; /** * 3.编写一个程序,输出一个字符串中的大写英文字母数,小写英文字母数以及非英文字母. 提示: 方法一:使用循环提取字符,判断字符是否在A-Z .a-z ...
- 【Python】对一个字符串中的所有英文字母进行排序
题目 对一个字符串中的所有英文字母进行排序 栗子 字符串 a = 'hello word' 排序后结果: ['d', 'e', 'h', 'l', 'l', 'o', 'o', 'r', 'w'] c ...
- javascript-对混合字母/数字数组进行排序
[A1, A10, A11, A12, A2, A3, A4, B10, B2, F1, F12, F3] 将其排序为: [A1, A2, A3, A4, A10, A11, A12, B2, B10 ...
- 2.04 对字母数字的混合排序
问题:现有字母和数字混合的数据,希望按照数字或字符部分来排序.考虑这个视图: create view V as select concat(ename, ' ',deptno) from emp; m ...
- java大写英文字母_输出一个字符串中的大写英文字母数,小写英文字母数以及非英文字母(.java)...
import java.util.Scanner; public class string1{ public static void main(String[] args){ String str; ...
- java 字符串 数字个数_JAVA 统计字符串中中文,英文,数字,空格的个数
packagecom.example.test;public classCountCharacter {/**中文字符*/ private int chCharacter = 0;/**英文字符*/ ...
- java 数字 汉字_Java提取字符串中的汉字、字母、数字
1.提取汉字 public static void main(String[] args) { String str = " 我是123一段测abd试 空a格 的字符 串 "; S ...
- cstring判断包含字符串_作为java程序员要知道的大厂常见的算法面试题:字符串的包含...
1.2 字符串的包含 题目描述 给定一长字符串a和一短字符串b.请问,如何最快地判断出短字符串b中的所有字符是否都在长字符串a中?请编写函数bool StringContain(string & ...
最新文章
- 库克称苹果不会学脸书发行加密货币
- 电机串电阻会有什么影响?
- Java NIO系列教程(十一) Pipe
- 前端学习(1963)vue之电商管理系统电商系统之控制级联选择框的选择范围
- 下面选项中不是开发java程序的步骤是_Java基础试题及其答案2
- zabbix监控部署 与添加主机
- tmux常用命令(分屏工具)
- 使用gorilla/mux增强Go HTTP服务器的路由能力
- POJ 3630 Phone List [Trie]
- linux输出 /dev/null
- Spring 各种包功能
- CF1715D 2+ doors 题解
- 泛知识+社交搜索,快手平台内容生态知识普惠价值凸显
- OPENGL 半透明贴图
- LikeLib区块链底层公链技术应用
- 95文件及文件夹操作实践
- 利用jieba库对《秦吏》做的简单处理
- 第九十一章 SQL函数 LOWER
- GoLang各种库(转)
- kubelet 压力驱逐 - The node had condition:[DiskPressure]