package org.springblade.common.utils; import org.apache.logging.log4j.util.Strings; public class ComplexNumberStringComparator{ public static int compare(String s1, String s2) { int i1 = 0, i2 = 0; while (i1 < s1.length() && i2 < s2.length()) { char c1 = s1.charAt(i1); char c2 = s1.charAt(i2); if (Character.isDigit(c1) && Character.isDigit(c2)) { //比较数字大小 int num1 = getNumber(s1, i1); int num2 = getNumber(s2, i2); if (num1 != num2) { return Integer.compare(num1, num2); } //相同数字时继续比较下一位 i1 += Integer.toString(num1).length(); i2 += Integer.toString(num2).length(); } else { //普通字符按照字典排序 if (c1 != c2) { return Character.compare(c1, c2); } i1++; i2++; } } //如果前缀相同,则长度短的字符串排在前面 return Integer.compare(s1.length(), s2.length()); } private static int getNumber(String s, int start) { int end = start; while (end < s.length() && Character.isDigit(s.charAt(end))) { end++; } if (start==end){ return 0; } return Integer.parseInt(s.substring(start, end)); } }