最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java字母加數(shù)字組合比較大小

 更新時間:2016年06月14日 10:31:36   作者:kingxss  
這篇文章主要通過實現(xiàn)Comarable接口來比較(如"a20"和"a9"這種)字符串的大小,希望能給大家做一個參考。

  針對字符串是數(shù)字和字母結(jié)合而進行的,如"a20"和"a9";比較而得出結(jié)果是"a20">"a9"。這種情況直接調(diào)用String的compareTo方法得出的結(jié)果是不是我們希望的。這個時候就需要寫自己的類并且實現(xiàn)Comarable接口來進行比較。這個是來源一次的面試題目,但是當時只有個思路。

  思路:

  1.轉(zhuǎn)換String為包含substring和Integer的list。(這里用String的spit方法直接拆分不知道怎么做?)

  2.將list的數(shù)據(jù)進行比較。

  3.如果list中的比較結(jié)果相等,再調(diào)用String的compareTo。

  代碼實現(xiàn):

package testsource; 
 
import java.util.ArrayList; 
import java.util.List; 
 
/** 
 * 
 * @author Waston Xu 
 * @date 2011-4-15 上午10:48:21 
 */ 
public class MyString implements Comparable<MyString> { 
  private final String string; 
  private List<Object> list; 
 
  public MyString(String string) { 
    this.string = string; 
    trimString2List(); 
  } 
 
  private void trimString2List() { 
    list = new ArrayList<Object>(); 
    Integer num = 0; 
    StringBuffer sb = new StringBuffer(); 
    for (int i = 0; i < this.string.length(); i++) { 
      char c = this.string.charAt(i); 
      if (c > 47 && c < 58) { 
        if (sb.length() != 0) { 
          list.add(sb); 
          sb = new StringBuffer(); 
        } 
        num = num * 10 + (c - '0'); 
        continue; 
      } else { 
        if (num != 0) { 
          list.add(num); 
          num = 0; 
        } 
        sb.append(c); 
        continue; 
      } 
    } 
    if (sb.length() != 0) { 
      list.add(sb); 
      sb = new StringBuffer(); 
    } else if (num != 0) { 
      list.add(num); 
      num = 0; 
    } 
  } 
 
  /* 
   * 在仔細的觀看了String的compareTo方法后,本來打算不調(diào)用其API進行編程, 
   * 但是考慮到出現(xiàn)"a02"和"a2"這樣的情況還是使用其API中的方式解決。 
   */ 
  private int compareToLikeString(String s) { 
    int len1 = string.length(); 
    int len2 = s.length(); 
    int n = Math.min(len1, len1); 
    if (n > 0) { 
      int k = 0; 
      while (k < n) { 
        char c1 = string.charAt(k); 
        char c2 = s.charAt(k); 
        if (c1 != c2) 
          return c1 - c2; 
        k++; 
      } 
    } 
 
    return len1 - len2; 
  } 
 
  @Override 
  public int compareTo(MyString anotherString) { 
    int len1 = list.size(); 
    int len2 = anotherString.list.size(); 
    int n = Math.min(len1, len2); 
 
    int mark = 0; 
    if (n > 0) { 
      int i = 0; 
      while (i < n) { 
        Object o1 = list.get(i); 
        Object o2 = anotherString.list.get(i); 
        if (o1 instanceof Integer && o2 instanceof Integer) { 
          mark = (Integer) o1 - (Integer) o2; 
        } else { 
          mark = o1.toString().compareTo(o2.toString()); 
        } 
        if (mark != 0) 
          return mark; 
        i++; 
      } 
    } 
    return compareToLikeString(anotherString.string); 
    //return string.compareTo(anotherString.string); 
    /* 如果這樣寫會有個弊端就是出現(xiàn)"a02"和"a2"這樣的情況,肯定是前面的小*/ 
    //return string.length() - anotherString.string.length(); 
  } 
 
  public static void main(String[] args) { 
    String s1 = "b9c"; 
    String s2 = "b09c"; 
    MyString m1 = new MyString(s1); 
    MyString m2 = new MyString(s2); 
 
    System.out.println(m1.compareTo(m2)); 
  } 
} 

查看更多Java的語法,大家可以關(guān)注:《Thinking in Java 中文手冊》、《JDK 1.7 參考手冊官方英文版》、《JDK 1.6 API java 中文參考手冊》、《JDK 1.5 API java 中文參考手冊》,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

白玉县| 疏附县| 丰县| 镇宁| 太康县| 嘉兴市| 定兴县| 永靖县| 从化市| 大埔县| 乌兰察布市| 龙口市| 乌恰县| 哈巴河县| 宁夏| 石嘴山市| 潼南县| 绩溪县| 扶风县| 同江市| 康乐县| 临夏市| 铁岭县| 万州区| 额敏县| 邮箱| 崇义县| 潞西市| 门头沟区| 神农架林区| 上杭县| 通渭县| 惠州市| 广昌县| 手机| 五常市| 庆阳市| 南投市| 丹凤县| 邢台市| 田林县|