import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
*
* @author fangwk
* @date 2016-7-12 11:26:34
*/
public class Hello {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("M1");
list.add("M1/1");
list.add("M1/12");
list.add("M1/2");
list.add("M12");
list.add("M12/2");
list.add("M2");
list.add("M2/1");
list.add("C1");
list.add("C1/1");
list.add("CT2/7");
list.add("C12");
list.add("CT2");
list.add("CT2/1");
list.add("CT2/2");
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String str1, String str2) {
String s1 = str1.split("/")[0];
String s2 = str2.split("/")[0];
if (s1.equals(s2)) {
if (str1.indexOf("/") < 0) { // 如M1和M1/1
return -1;
} else if (str2.indexOf("/") < 0) { // 如M1/1和M1
return 1;
} else { // 如M1/1,M1/2
return Integer.parseInt(str1.split("/")[1]) - Integer.parseInt(str2.split("/")[1]);
}
} else {
if (s1.substring(0, getIndexOfFirstCharByReg(str1, "[0-9]"))
.equals(s2.substring(0, getIndexOfFirstCharByReg(str2, "[0-9]")))) { // 字母部分相同,如M12,M2,则比较/之前的数字
int num1 = str1.indexOf("/") == -1 ? str1.length() : str1.indexOf("/");
int num2 = str2.indexOf("/") == -1 ? str2.length() : str2.indexOf("/");
return Integer.parseInt(str1.substring(1, num1)) - Integer.parseInt(str2.substring(1, num2));
} else {
return s1.compareToIgnoreCase(s2); // 字母部分比较
}
}
}
});
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
public static int getIndexOfFirstCharByReg(String target, String reg) {
Pattern pattern = Pattern.compile(reg);
Matcher matcher = pattern.matcher(target);
if (matcher.find()) {
return target.indexOf(matcher.group());
}
return 0;
}
}
结果为:
C1
C1/1
C12
CT2
CT2/1
CT2/2
CT2/7
M1
M1/1
M1/2
M1/12
M2
M2/1
M12
M12/2