我有一组字符串:
String str2= "1.1 ";
String str2= "1.12 ";
String str2= "1.12.1 ";
String str2= "1.12.2 ";
String str2= "1.13 ";
String str2= "1.13.1 ";
String str2= "1.13.2 ";
String str2= "1.2 ";
String str2= "1.2.11 ";
String str2= "1.2.2 ";
怎么样将其排列成:
str2= "1.1 ";
str2= "1.2 ";
str2= "1.2.2 ";
str2= "1.2.11 ";
str2= "1.12 ";
str2= "1.12.1 ";
str2= "1.12.2 ";
str2= "1.13 ";
str2= "1.13.1 ";
str2= "1.13.2 ";
麻烦看看
------解决方案--------------------
String str2= "1.01.00 ";
String str2= "1.12.00 ";
String str2= "1.12.01 ";
String str2= "1.12.02 ";
String str2= "1.13.00 ";
String str2= "1.13.10 ";
String str2= "1.13.20 ";
String str2= "1.02.00 ";
String str2= "1.02.11 ";
String str2= "1.02.02 ";
再排序
------解决方案--------------------
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class SortTest {
public static void main(String[] args) {
List <String> list = new ArrayList <String> ();
list.add( "1.1 ");
list.add( "1 ");
list.add( "1.12.1 ");
list.add( "1.12 ");
list.add( "1.2 ");
list.add( "1.4.5.2 ");
list.add( "1.2.5 ");
list.add( "1.2.2 ");
list.add( "1.4 ");
list.add( "1.4.5 ");
list.add( "1.4.3 ");
list.add( "1.3 ");
list.add( "1.3.3 ");
list.add( "1.3.1 ");
Collections.sort(list, new MyComparator <String> ());
// 输出结果
for (String str : list) {
System.out.println(str);
}
}
}
class MyComparator <E> implements Comparator <E> {
public int compare(E t1, E t2) {
// 可以采用正则表达式 split( "\\. ") 来实现,但是速度稍慢一些
// String[] s1 = t1.toString().split( "\\. ");
// String[] s2 = t1.toString().split( "\\. ");
String[] s1 = str2Array(t1.toString(), '. ');
String[] s2 = str2Array(t2.toString(), '. ');
int min = s1.length < s2.length ? s1.length : s2.length;
for (int i = 0; i < min; i++) {
if (s1[i].length() != s2[i].length()) {
return s1[i].length() - s2[i].length();
}
if (s1[i].compareTo(s2[i]) != 0) {
return s1[i].compareTo(s2[i]);
}
}
if (s1.length == s2.length) {
return 0;
} else if (s1.length > s2.length) {
return 1;
} else {
return -1;
}
}
private String[] str2Array(String str, char separator) {
List <String> list = new ArrayList <String> ();
int sub = 0;
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) == separator) {
list.add(str.substring(sub, i));
sub = i + 1;