java list 字符精确排序 例如: a1 a12 a13 a2 a3 排序后是:a1 a2 a3 a12 a13 ,不是a1 a12 a13 a2 a3

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java list 字符精确排序 例如: a1 a12 a13 a2 a3 排序后是:a1 a2 a3 a12 a13 ,不是a1 a12 a13 a2 a3相关的知识,希望对你有一定的参考价值。

参考技术A package test;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Test

public static void main(String[] args)
List<String> list = new ArrayList<String>();
list.add("3");list.add("a1");list.add("a12");list.add("a13");list.add("a2");
list.add("a3");list.add("c1");list.add("b2");list.add("d1");
list.add("b1");list.add("c3");list.add("2");list.add("1");
System.out.println("排序前------>"+list);
Collections.sort(list, new Comparator<String>()
String regNum = "[\\d]";//数字字符
String regStr = "[^\\d]";//非数字字符
@Override
public int compare(String o1, String o2)
int num1 = Integer.parseInt(o1.replaceAll(regStr, ""));
int num2 = Integer.parseInt(o2.replaceAll(regStr, ""));
String str1 = o1.replaceAll(regNum, "");
String str2 = o2.replaceAll(regNum, "");
//都有字母
if( ! isnull(str1) && ! isnull(str2))
if(str1.compareTo(str2) > 0)
return 1;
else if(str1.compareTo(str2) < 0)
return -1;
else
return num1-num2;

else//存在数字
//都是数字
if(isnull(str1) && isnull(str2))
return num1 - num2;
else if(isnull(str1) && ! isnull(str2))//数字排前面:o1是数字,o2不是数字
return -1;
else if(! isnull(str1) && isnull(str2))//数字排前面:o1不是数字,o2是数字
return 1;
else
return 0;




);
System.out.println("排序后======>"+list);

private static boolean isnull(String str)
return str == null || str.trim().length() == 0;


参考技术B package zhidao;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class DButil

public static void main ( String[] args )

ArrayList<String> list = new ArrayList<String> ();
list.add ("a1");
list.add ("a12");
list.add ("a13");
list.add ("a2");
list.add ("a3");
System.out.println (list);
Collections.sort (list, new Comparator<String> ()

String reg = "[^\\\\d]";

@Override
public int compare ( String o1, String o2 )

int first = Integer.parseInt (o1.replaceAll (reg, ""));
int second = Integer.parseInt (o2.replaceAll (reg, ""));
if (first > second)

return 1;

else if (first < second)

return -1;

else

return 0;


);
System.out.println (list);

追问

额... 先谢谢你 可是你只考虑了a 要是出现a b c d  这个就乱了

追答

你说清楚来,没有看懂, 相同字母在一起,数字大的在后面?

a1, a12, a13, a2, a3, b2, b3, c2

追问

对 就是这样 先按照字母排序 字母若是相同 就按数字大小排序 a1 a2 a12 a13 b1 b2 b12 c1 ...就这么排序

java 字符串全排列 和 去重

用递归进行排序 ,

用TreeSet 去重。

public class test { 
public static void main(String []args){
String str = "AVCV";
TreeSet set = new TreeSet();
List list = digui(str);
System.out.println(list.size());
for(Object o :list){
set.add(o.toString());
}
}
public static List digui(String str){
List list =new ArrayList();
if(str.length() == 1){
list.add(str);
}
for(int i = 0;i < str.length();i++){
String f = str.substring(i,i+1);
String res = str.substring(0,i)+str.substring(i+1);
List px = digui(res);
for(int j = 0;j<px.size();j++){
list.add(f+px.get(j).toString());
}
}
return list;
}
}

以上是关于java list 字符精确排序 例如: a1 a12 a13 a2 a3 排序后是:a1 a2 a3 a12 a13 ,不是a1 a12 a13 a2 a3的主要内容,如果未能解决你的问题,请参考以下文章

Java 8 Stream排序字符串列表[重复]

list如何排序 list排序方法是啥

java 分解含有双引号的字符串

java 怎么对日期列进行排序

java list 相同的字段排序

VB中list里是sort属性,当true时,阿拉伯数字按照字符排序,怎么看大小的