Java字母加数字组合比较大小
针对字符串是数字和字母结合而进行的,如"a20"和"a9";比较而得出结果是"a20">"a9"。这种情况直接调用String的compareTo方法得出的结果是不是我们希望的。这个时候就需要写自己的类并且实现Comarable接口来进行比较。这个是来源一次的面试题目,但是当时只有个思路。
思路:
1.转换String为包含substring和Integer的list。(这里用String的spit方法直接拆分不知道怎么做?)
2.将list的数据进行比较。
3.如果list中的比较结果相等,再调用String的compareTo。
代码实现:
packagetestsource; importjava.util.ArrayList; importjava.util.List; /** * *@authorWastonXu *@date2011-4-15上午10:48:21 */ publicclassMyStringimplementsComparable<MyString>{ privatefinalStringstring; privateList<Object>list; publicMyString(Stringstring){ this.string=string; trimString2List(); } privatevoidtrimString2List(){ list=newArrayList<Object>(); Integernum=0; StringBuffersb=newStringBuffer(); for(inti=0;i<this.string.length();i++){ charc=this.string.charAt(i); if(c>47&&c<58){ if(sb.length()!=0){ list.add(sb); sb=newStringBuffer(); } 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=newStringBuffer(); }elseif(num!=0){ list.add(num); num=0; } } /* *在仔细的观看了String的compareTo方法后,本来打算不调用其API进行编程, *但是考虑到出现"a02"和"a2"这样的情况还是使用其API中的方式解决。 */ privateintcompareToLikeString(Strings){ intlen1=string.length(); intlen2=s.length(); intn=Math.min(len1,len1); if(n>0){ intk=0; while(k<n){ charc1=string.charAt(k); charc2=s.charAt(k); if(c1!=c2) returnc1-c2; k++; } } returnlen1-len2; } @Override publicintcompareTo(MyStringanotherString){ intlen1=list.size(); intlen2=anotherString.list.size(); intn=Math.min(len1,len2); intmark=0; if(n>0){ inti=0; while(i<n){ Objecto1=list.get(i); Objecto2=anotherString.list.get(i); if(o1instanceofInteger&&o2instanceofInteger){ mark=(Integer)o1-(Integer)o2; }else{ mark=o1.toString().compareTo(o2.toString()); } if(mark!=0) returnmark; i++; } } returncompareToLikeString(anotherString.string); //returnstring.compareTo(anotherString.string); /*如果这样写会有个弊端就是出现"a02"和"a2"这样的情况,肯定是前面的小*/ //returnstring.length()-anotherString.string.length(); } publicstaticvoidmain(String[]args){ Strings1="b9c"; Strings2="b09c"; MyStringm1=newMyString(s1); MyStringm2=newMyString(s2); System.out.println(m1.compareTo(m2)); } }
查看更多Java的语法,大家可以关注:《ThinkinginJava中文手册》、《JDK1.7参考手册官方英文版》、《JDK1.6APIjava中文参考手册》、《JDK1.5APIjava中文参考手册》,也希望大家多多支持毛票票。