import java.util.Arrays;
import java.util.Comparator;
public class FileSort {
public String[] solution(String[] files) {
Arrays.sort(files, new Comparator<String>() {
public int compare(String s1, String s2) {
s1 = cutTail(s1);
s2 = cutTail(s2);
if (Integer.parseInt(s1.replaceAll("[^0-9]", "")) > Integer.parseInt(s2.replaceAll("[^0-9]", ""))) {
return 1;
} else if (Integer.parseInt(s1.replaceAll("[^0-9]", "")) < Integer.parseInt(s2.replaceAll("[^0-9]", ""))) {
return -1;
}
return 0;
}
});
Arrays.sort(files, new Comparator<String>() {
public int compare(String s1, String s2) {
s1 = cutTailAndNum(s1);
s2 = cutTailAndNum(s2);
if (s1.replaceAll("[0-9]", "").toLowerCase().compareTo(s2.replaceAll("[0-9]", "").toLowerCase()) > 0) {
return 1;
}
if (s1.replaceAll("[0-9]", "").toLowerCase().compareTo(s2.replaceAll("[0-9]", "").toLowerCase()) < 0) {
return -1;
}
return 0;
}
});
return files;
}
public static String cutTailAndNum(String str) {
for (int i = 1; i < str.length(); i++) {
if (str.charAt(i) >= '0' && str.charAt(i) <= '9') {
str = str.substring(0, i);
break;
}
}
return str;
}
public static String cutTail(String str) {
for (int i = 1; i < str.length(); i++) {
if ((str.charAt(i) < '0' || str.charAt(i) > '9')
&& (str.charAt(i - 1) >= '0' && str.charAt(i - 1) <= '9')) {
str = str.substring(0, i);
break;
}
}
return str;
}
}
자바 정규식 참고 : https://offbyone.tistory.com/400
str = str.replaceAll("[^0-9]", ""); : 0 ~ 9 가 아닌 문자(숫자가 아닌 문자)를 ""로 치환. 즉 숫자만 추출
str = str.replaceAll("[0-9]", ""); : 0 ~ 9 숫자를 ""로 치환. 즉 문자만 추출(메타 문자열에서 ^은 not을 의미)