当前位置: 移动技术网 > IT编程>开发语言>Java > Java字母加数字组合比较大小

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

2019年07月22日  | 移动技术网IT编程  | 我要评论

等爱的玫瑰简谱,微型摆线针轮减速机,防雷插座有用吗

  针对字符串是数字和字母结合而进行的,如"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的语法,大家可以关注:《》、《》、《》、《》,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网