java排序的内容包含数组、英文、符号,只包含数字的优先排在前面
时间: 2023-08-24 16:04:03 浏览: 106
可以按照以下步骤实现这个排序:
1. 创建一个实现Comparator接口的类,该类中需要实现compare方法来定义排序规则。
2. 在compare方法中,首先判断排序的内容属于哪种类型(数组、英文、符号、纯数字),然后分别进行比较排序。
3. 对于纯数字需要特殊处理,将纯数字排在前面。
下面是一个示例代码,演示如何对一个包含数组、英文、符号、纯数字的集合进行自定义排序:
```java
import java.util.Comparator;
public class MyComparator implements Comparator<String> {
@Override
public int compare(String s1, String s2) {
// 首先判断排序的内容属于哪种类型
boolean s1IsArray = s1.startsWith("[");
boolean s2IsArray = s2.startsWith("[");
boolean s1IsAlpha = s1.matches("[a-zA-Z]+");
boolean s2IsAlpha = s2.matches("[a-zA-Z]+");
boolean s1IsNumeric = s1.matches("\\d+");
boolean s2IsNumeric = s2.matches("\\d+");
if (s1IsNumeric && !s2IsNumeric) {
// 如果s1是纯数字,s2不是,s1排在前面
return -1;
} else if (!s1IsNumeric && s2IsNumeric) {
// 如果s2是纯数字,s1不是,s2排在前面
return 1;
} else if (s1IsArray && s2IsArray) {
// 如果都是数组,按数组长度排序
int len1 = s1.length() - s1.replace(",", "").length() + 1;
int len2 = s2.length() - s2.replace(",", "").length() + 1;
return Integer.compare(len1, len2);
} else if (s1IsArray) {
// 如果只有s1是数组,排在后面
return 1;
} else if (s2IsArray) {
// 如果只有s2是数组,排在前面
return -1;
} else if (s1IsAlpha && s2IsAlpha) {
// 如果都是英文,按字母序排序
return s1.compareTo(s2);
} else {
// 如果都不属于上述类型,按字母序排序
return s1.compareTo(s2);
}
}
}
```
使用示例:
```java
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("b");
list.add("[1,2,3]");
list.add("d");
list.add("a");
list.add("[4,5]");
list.add("c");
list.add("123");
Collections.sort(list, new MyComparator());
System.out.println(list); // [123, a, b, c, [4,5], [1,2,3], d]
}
}
```
在上面的示例中,我们定义了一个MyComparator类来实现自定义排序,然后使用Collections.sort方法对集合进行排序。最终的排序结果是:123、a、b、c、[4,5]、[1,2,3]、d。可以看到,纯数字排在最前面,其它类型按字母序排列。
阅读全文