我知道使用 Collections.sort,但它只对包含字母的字符串进行排序。如何让 ArrayList 按数字和字母顺序排序?
如果字符串是一个数字,它已经被排序(虽然是一个字符串)看看:
import java.util.*;
class Sort {
public static void main( String [] args ) {
List list = Arrays.asList("Kings","7", "Abcd", "3.1416");
Collections.sort( list );
System.out.println( list );
}
}
打印
$ java Sort
[3.1416, 7, Abcd, Kings]
这是你需要的吗?
编辑
假设(猜测)您需要对一副既有数字又有“字母”(J、Q、K、A)的卡片进行排序,您可以尝试使用自定义比较器。
这是一个将数字“作为数字”考虑在内,其余作为字符串考虑,因此“10”出现在“2”之后但在“Kings”之前
import java.util.*;
class Sort {
public static void main( String [] args ) {
List<String> list = Arrays.asList("Kings","7", "Queen", "3", "10", "A", "2", "8", "Joker");
Collections.sort( list , new Comparator<String>(){
public int compare( String a, String b ){
// if both are numbers
if( a.matches("\\d+") && b.matches("\\d+")) {
return new Integer( a ) - new Integer( b );
}
// else, compare normally.
return a.compareTo( b );
}
});
System.out.println( list );
}
}
$ java Sort
[2, 3, 7, 8, 10, A, Joker, Kings, Queen]
如果这是您需要的,我想这将帮助您弄清楚其余部分。接下来的事情可能是如何对黑桃和红桃进行排序。
按照Roman 的回答,您可以创建一个类并实现Comparable 接口:
class Card implements Comparable<Card> {
public int compareTo( Card other ) {
// add custom logic to compare one card with other
}
}