package com.gkhy.exam.common.utils; import java.util.Comparator; public class NaturalOrderComparator implements Comparator { private boolean isDigit(char ch) { return ch >= '0' && ch <= '9'; } @Override public int compare(String s1, String s2) { if (s1 == null || s2 == null) { return 0; // 或根据业务决定 null 的排序位置 } int i1 = 0, i2 = 0; while (i1 < s1.length() && i2 < s2.length()) { char c1 = s1.charAt(i1); char c2 = s2.charAt(i2); if (isDigit(c1) && isDigit(c2)) { // 比较数字部分 long n1 = 0, n2 = 0; while (i1 < s1.length() && isDigit(s1.charAt(i1))) { n1 = n1 * 10 + (s1.charAt(i1++) - '0'); } while (i2 < s2.length() && isDigit(s2.charAt(i2))) { n2 = n2 * 10 + (s2.charAt(i2++) - '0'); } if (n1 != n2) { return Long.compare(n1, n2); } } else { // 非数字字符比较 if (c1 != c2) { return Character.compare(c1, c2); } i1++; i2++; } } // 剩余长度比较 return Integer.compare(s1.length(), s2.length()); } }