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));
|
}
|
|
}
|