Java List实现排序优先首字母 其次符号
时间: 2024-12-14 07:15:39 浏览: 8
在Java中,如果你想对`List<String>`按照首字母的字母顺序,其次再考虑特定符号(如空格、标点等),你可以使用`Collections.sort()`方法,并自定义一个`Comparator`。这里我们假设符号的重要性低于字母,所以空格和标点排在字母之后。
首先,我们需要创建一个`Comparator`类,它将字符串分解成两部分:首字母和剩余部分,然后按照我们的规则进行比较:
```java
import java.util.*;
class AlphabetAndSymbolComparator implements Comparator<String> {
@Override
public int compare(String s1, String s2) {
// 首先提取首字母并忽略大小写
String firstChar1 = s1.toLowerCase().charAt(0) + "";
String firstChar2 = s2.toLowerCase().charAt(0) + "";
// 比较首字母,如果相同,再提取第二个字符(如果有的话)
int result = firstChar1.compareTo(firstChar2);
if (result == 0) {
// 如果首字母也一样,看下一个字符直到分出结果
result = compareRemainingChars(s1, s2);
}
return result;
}
private int compareRemainingChars(String s1, String s2) {
// 假设空格和特殊符号排在字母后面
for (int i = 1; i < Math.min(s1.length(), s2.length()); i++) {
char c1 = s1.charAt(i);
char c2 = s2.charAt(i);
if (!Character.isLetterOrDigit(c1) && !Character.isLetterOrDigit(c2)) {
// 特殊符号直接比较 ASCII 码
return Integer.compare(c1, c2);
} else if (!Character.isLetter(c1) && Character.isLetter(c2)) {
// 字母优于非字母
return -1;
} else if (!Character.isLetter(c2) && Character.isLetter(c1)) {
// 否则交换位置
return 1;
}
}
// 如果长度相等,返回原始字符串长度的差异
return s1.length() - s2.length();
}
}
// 使用示例
List<String> list = Arrays.asList("Apple!", "zebra", "orange.", "Banana");
Collections.sort(list, new AlphabetAndSymbolComparator());
阅读全文