有一个类似于这样的章节目录 存储在一个String[] 中
c1s.si
c2.1.1s.si
c2.1.2s.si
c2.1s.si
c2.2.1s.si
c2.2.2s.si
c2.2.3s.si
c2.2s.si
c2.3s.si
c2s.si
c3.1.1s.si
c3.1.2s.si
c3.1s.si
c3.2.1s.si
c3.2.2s.si
c3.2.3s.si
c3.2.4s.si
c3.2.5s.si
c3.2s.si
c3.3.1s.si
c3.3.2s.si
c3.3.3s.si
c3.3.4s.si
c3.3s.si
c3.4.1s.si
c3.4.2s.si
c3.4s.si
c3.5.1s.si
c3.5.2s.si
c3.5.3s.si
c3.5.4s.si
c3.5s.si
c3.6.1s.si
c3.6.2s.si
c3.6.3s.si
c3.6.4s.si
c3.6.5s.si
c3.6s.si
c3.7.1s.si
c3.7.2s.si
c3.7.3s.si
c3.7.4s.si
c3.7.5s.si
c3.7s.si
c3.8s.si
c3s.si
c4.1s.si
c4.2s.si
c4.3.1s.si
c4.3.2s.si
c4.3s.si
c4.4s.si
c4s.si请高手帮忙java 排序
期望排序结果是这个样子: 类似于 书的章节目录
c1s.si
c2s.si
c2.1s.si
c2.1.1s.si
c2.1.2s.si
c2.2s.si
c2.2.1s.si
c2.2.2s.si
c2.2.3s.si
c2.3s.si
c1s.si
c2.1.1s.si
c2.1.2s.si
c2.1s.si
c2.2.1s.si
c2.2.2s.si
c2.2.3s.si
c2.2s.si
c2.3s.si
c2s.si
c3.1.1s.si
c3.1.2s.si
c3.1s.si
c3.2.1s.si
c3.2.2s.si
c3.2.3s.si
c3.2.4s.si
c3.2.5s.si
c3.2s.si
c3.3.1s.si
c3.3.2s.si
c3.3.3s.si
c3.3.4s.si
c3.3s.si
c3.4.1s.si
c3.4.2s.si
c3.4s.si
c3.5.1s.si
c3.5.2s.si
c3.5.3s.si
c3.5.4s.si
c3.5s.si
c3.6.1s.si
c3.6.2s.si
c3.6.3s.si
c3.6.4s.si
c3.6.5s.si
c3.6s.si
c3.7.1s.si
c3.7.2s.si
c3.7.3s.si
c3.7.4s.si
c3.7.5s.si
c3.7s.si
c3.8s.si
c3s.si
c4.1s.si
c4.2s.si
c4.3.1s.si
c4.3.2s.si
c4.3s.si
c4.4s.si
c4s.si请高手帮忙java 排序
期望排序结果是这个样子: 类似于 书的章节目录
c1s.si
c2s.si
c2.1s.si
c2.1.1s.si
c2.1.2s.si
c2.2s.si
c2.2.1s.si
c2.2.2s.si
c2.2.3s.si
c2.3s.si
public static void main(String[] args) { String ss[] = new String[] { "c1s.si", "c2.1.1s.si", "c2.1.2s.si",
"c2.1s.si", "c2.2.1s.si", "c2.2.2s.si", "c2.2.3s.si",
"c2.2s.si", "c2.3s.si", "c2s.si", "c3.1.1s.si", "c3.1.2s.si",
"c3.1s.si", "c3.2.1s.si", "c3.2.2s.si", "c3.2.3s.si",
"c3.2.4s.si", "c3.2.5s.si", "c3.2s.si", "c3.3.1s.si",
"c3.3.2s.si", "c3.3.3s.si", "c3.3.4s.si", "c3.3s.si" };
Arrays.sort(ss, new Comparator<String>() {
public int compare(String o1, String o2) {
double d = getN(o1) - getN(o2);
if (d < 0) {
return -1;
} else if (d > 0) {
return 1;
} else {
return 0;
}
} } ); // the result:
for (int i = 0; i < ss.length; i++) {
System.out.println(ss[i]);
} } public static double getN(String s) {
Matcher m = Pattern.compile("\\d+(.\\d+)*").matcher(s);
StringBuffer sb = new StringBuffer("");
String result = "";
while (m.find()) {
sb.append(m.group());
}
if (sb.indexOf(".") != -1) {
int pos = sb.indexOf(".");
result += sb.substring(0, pos + 1)
+ sb.substring(pos + 1).replace(".", "");
} else {
result = sb.toString();
}
return Double.parseDouble(result); }}
import java.util.Comparator;public class Compare implements Comparator {
static String[] s = { "c1s.si", "c2.1.1s.si", "c2.1.2s.si", "c2.1s.si",
"c2.2.1s.si", "c2.2.2s.si", "c2.2.3s.si", "c2.2s.si", "c2.3s.si",
"c2s.si", "c3.1.1s.si", "c3.1.2s.si", "c3.1s.si", "c3.2.1s.si",
"c3.2.2s.si", "c3.2.3s.si", "c3.2.4s.si", "c3.2.5s.si", "c3.2s.si",
"c3.3.1s.si", "c3.3.2s.si", "c3.3.3s.si", "c3.3.4s.si", "c3.3s.si",
"c3.4.1s.si", "c3.4.2s.si", "c3.4s.si", "c3.5.1s.si", "c3.5.2s.si",
"c3.5.3s.si", "c3.5.4s.si", "c3.5s.si", "c3.6.1s.si", "c3.6.2s.si",
"c3.6.3s.si", "c3.6.4s.si", "c3.6.5s.si", "c3.6s.si", "c3.7.1s.si",
"c3.7.2s.si", "c3.7.3s.si", "c3.7.4s.si", "c3.7.5s.si", "c3.7s.si",
"c3.8s.si", "c3s.si", "c4.1s.si", "c4.2s.si", "c4.3.1s.si",
"c4.3.2s.si", "c4.3s.si", "c4.4s.si", "c4s.si" }; @Override
public int compare(Object o1, Object o2) {
String s1=o1.toString();
String s2=o2.toString();
String[] s1Arr=s1.split("\\.");
String[] s2Arr=s2.split("\\.");
for(int i=0;i<s1Arr.length&&i<s2Arr.length;i++){
if(s1Arr[i].equals(s2Arr[i])){
continue;
}if(s1Arr[i].compareTo(s2Arr[i])>0){
return 1;
}else{
if (s1Arr[i].endsWith("s") && !s2Arr[i].endsWith("s")) {
if (s1Arr[i].substring(0, s1Arr[i].length() - 1).equals(
s2Arr[i])) {
return -1;
}
}
if(!s1Arr[i].endsWith("s")&&s2Arr[i].endsWith("s")){
if(s1Arr[i].equals(s2Arr[i].substring(0, s2Arr[i].length()-1))){
return 1;
}
}
return -1;
}
}
return -1;
} public void sort(String[] s){
Arrays.sort(s,new Compare());
}
public static void main(String args[]){
new Compare().sort(s);
for(String ss:s){
System.out.println(ss);
}
}
}