Files
server/src/main/java/com/point/strategy/common/FileNameComparator.java
2025-10-27 13:47:03 +08:00

52 lines
1.5 KiB
Java

package com.point.strategy.common;
import java.io.File;
import java.util.Comparator;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class FileNameComparator implements Comparator<String> {
private static final Pattern NUMBER_PATTERN = Pattern.compile("(\\d+)");
@Override
public int compare(String s1, String s2) {
String name1 = new File(s1).getName();
String name2 = new File(s2).getName();
Matcher m1 = NUMBER_PATTERN.matcher(name1);
Matcher m2 = NUMBER_PATTERN.matcher(name2);
int pos1 = 0, pos2 = 0;
while (m1.find() && m2.find()) {
// 比较数字前的字符串部分
String prefix1 = name1.substring(pos1, m1.start());
String prefix2 = name2.substring(pos2, m2.start());
int prefixCompare = prefix1.compareTo(prefix2);
if (prefixCompare != 0) {
return prefixCompare;
}
// 比较数字部分(按数值比较)
Long num1 = Long.parseLong(m1.group());
Long num2 = Long.parseLong(m2.group());
int numCompare = num1.compareTo(num2);
if (numCompare != 0) {
return numCompare;
}
pos1 = m1.end();
pos2 = m2.end();
}
// 比较剩余部分
String suffix1 = name1.substring(pos1);
String suffix2 = name2.substring(pos2);
return suffix1.compareTo(suffix2);
}
}