栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java字母加数字组合比较大小

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java字母加数字组合比较大小

  针对字符串是数字和字母结合而进行的,如"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; 
 
 
public class MyString implements Comparable { 
  private final String string; 
  private List list; 
 
  public MyString(String string) { 
    this.string = string; 
    trimString2List(); 
  } 
 
  private void trimString2List() { 
    list = new ArrayList(); 
    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; 
    } 
  } 
 
   
  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); 
     
    //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 中文参考手册》,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号