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中文参考手册》,也希望大家多多支持毛票票。