当前位置: 代码迷 >> Eclipse >> 字符串排序,该怎么解决
  详细解决方案

字符串排序,该怎么解决

热度:103   发布时间:2016-04-23 14:30:08.0
字符串排序
我有一组字符串:
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;
  相关解决方案