java中List<String>排序数字、汉字、字母,排序权重数字>字母>汉字 数字从小到大
时间: 2024-09-09 08:10:17 浏览: 41
Java 新版POI 读取excel文件信息返回List<List<String>>对象,包含文件内公式处理
在Java中,直接对`List<String>`按照这种特定规则进行排序可能会比较复杂,因为默认的字符串比较会按照Unicode编码进行,这并不一定符合你的需求。不过,你可以创建一个自定义的Comparator来实现这个排序。
首先,你需要一个函数来确定每个字符的"权重值",例如:
```java
int getWeight(char c) {
if (Character.isDigit(c)) {
return Character.getNumericValue(c);
} else if (Character.isLetter(c)) {
// 字母区分大小写,这里假设小写字母优先于大写字母
return c >= 'a' && c <= 'z' ? c - 'a' + 1 : c - 'A' + 26;
} else {
// 如果是汉字或其他非英文字符,这里可以简单地将其视为最高权重
return Integer.MAX_VALUE;
}
}
```
然后,你可以创建一个Comparator并用它来排序列表:
```java
import java.util.*;
class CustomComparator implements Comparator<String> {
@Override
public int compare(String s1, String s2) {
for (int i = 0; i < Math.min(s1.length(), s2.length()); i++) {
int weight1 = getWeight(s1.charAt(i));
int weight2 = getWeight(s2.charAt(i));
if (weight1 != weight2) {
return weight1 - weight2;
}
}
// 如果长度相等,按原始顺序结束比较
return s1.compareTo(s2);
}
}
public static void main(String[] args) {
List<String> list = Arrays.asList("5", "Z", "中文", "b", "9");
Collections.sort(list, new CustomComparator());
System.out.println(list); // 输出: [5, b, Z, 中文, 9]
}
```
阅读全文