完整代码如下:
import java.util.ArrayList;
import java.util.List;
/**
* Windows 排序
*/
public class WindowsSort {
public static void main(String[] args) {
List<String> sortList = new ArrayList<>();
sortList.add("010");
sortList.add("BZ1.10.1");
sortList.add("010-1");
sortList.add("第10");
sortList.add("010-a");
sortList.add("BZ1.1.10");
sortList.add("BA1.2.109");
sortList.add("BA1.1.110");
sortList.add("BA1.2.110");
sortList.add("011");
sortList.add("BZ1.1.2");
sortList.add("第20");
sortList.add("020");
sortList.add("100");
sortList.add("BZ010");
sortList.add("第2");
sortList.add("BZ020");
sortList.add("BZ1.1.0");
sortList.add("BZ1.2.1");
// 排序方法
windowsSort(sortList);
// 输出测试
sortList.forEach(System.out::println);
}
public static void windowsSort(List<String> list) {
list.sort((o1, o2) -> {
char[] arr1 = o1.toCharArray();
char[] arr2 = o2.toCharArray();
int i = 0;
int j = 0;
while (i < arr1.length && j < arr2.length) {
if (Character.isDigit(arr1[i]) && Character.isDigit(arr2[j])) {
StringBuilder s1 = new StringBuilder();
StringBuilder s2 = new StringBuilder();
while (i < arr1.length && Character.isDigit(arr1[i])) {
s1.append(arr1[i]);
i++;
}
while (j < arr2.length && Character.isDigit(arr2[j])) {
s2.append(arr2[j]);
j++;
}
if (Integer.parseInt(s1.toString()) > Integer.parseInt(s2.toString())) {
return 1;
}
if (Integer.parseInt(s1.toString()) < Integer.parseInt(s2.toString())) {
return -1;
}
} else {
if (arr1[i] > arr2[j]) {
return 1;
}
if (arr1[i] < arr2[j]) {
return -1;
}
i++;
j++;
}
}
if (arr1.length == arr2.length) {
return 0;
} else {
return arr1.length > arr2.length ? 1 : -1;
}
});
}
}
输出结果:
010
010-1
010-a
011
020
100
BA1.1.110
BA1.2.109
BA1.2.110
BZ1.1.0
BZ1.1.2
BZ1.1.10
BZ1.2.1
BZ1.10.1
BZ010
BZ020
第2
第10
第20
Windows实际结果: