国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java字母加數字組合比較大小

2019-11-26 14:12:00
字體:
來源:轉載
供稿:網友

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

  思路:

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

  2.將list的數據進行比較。

  3.如果list中的比較結果相等,再調用String的compareTo。

  代碼實現:

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方法后,本來打算不調用其API進行編程,    * 但是考慮到出現"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);     /* 如果這樣寫會有個弊端就是出現"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的語法,大家可以關注:《Thinking in Java 中文手冊》、《JDK 1.7 參考手冊官方英文版》、《JDK 1.6 API java 中文參考手冊》、《JDK 1.5 API java 中文參考手冊》,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 凤翔县| 德江县| 铜梁县| 吉林省| 甘孜| 千阳县| 哈尔滨市| 广宗县| 尚志市| 三亚市| 曲阜市| 舟山市| 洛浦县| 黎城县| 高要市| 德庆县| 吴江市| 兴业县| 清远市| 微山县| 双峰县| 龙州县| 青阳县| 新竹市| 曲靖市| 克拉玛依市| 定边县| 综艺| 阜新市| 亚东县| 永胜县| 唐海县| 偃师市| 马边| 民丰县| 化州市| 邵阳县| 志丹县| 五家渠市| 且末县| 北安市|