文字列の場合、「A20」や「A9」などの数字と文字の組み合わせ。結果は「A20」>「A9」になりました。この場合、StringのComparetoメソッドを呼び出す結果は、私たちが望んでいるものではありません。現時点では、独自のクラスを作成し、比較するために合成可能なインターフェイスを実装する必要があります。これは初めてのインタビューの質問ですが、当時のアイデアは1つだけでした。
アイデア:
1.文字列をサブストリングと整数を含むリストに変換します。 (ここで文字列の唾を吐く方法を使用して直接分割する方法がわかりませんか?)
2。リストデータを比較します。
3.リストの比較結果が等しい場合は、Stringの比較を呼び出します。
コード実装:
パッケージTestSource; java.util.arraylistをインポートします。 java.util.listをインポートします。 / ** * * @author waston xu * @date 2011-4-15 10:48:21 am */ public class mystring emplesiment Camparable <mystring> {private final string string;プライベートリスト<Object>リスト; public mystring(string string){this.string = string; trimstring2List(); } private void trimstring2list(){list = new ArrayList <Object>();整数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');続く; } else {if(num!= 0){list.add(num); num = 0; } sb.append(c);続く; }} 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)c1 -c2を返します。 K ++; }} ren1 -len2を返します。 } @override public int compareto(mystring anothestring){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);オブジェクトo2 = anothestring.list.get(i); if(o1 instanceof integer && o2 instanceof integer){mark =(integer)o1-(integer)o2; } else {mark = o1.toString()。比較(o2.toString()); } if(mark!= 0)return mark; i ++; }} return comparetolikestring(anotherstring.string); // string.comPareToを返します(AnotherString.String); / *このように記述する場合、「A02」と「A2」という不利な点がありますが、以前のSmall small * // return string.length() - anothestring.string.length(); } public static void main(string [] args){string s1 = "b9c";文字列s2 = "b09c"; MyString M1 = New MyString(S1); MyString M2 = new Mystring(S2); System.out.println(M1.comPareto(M2)); }}より多くのJava構文を表示するには、「Java Chinese Manualで考えている」、「JDK 1.7リファレンスマニュアル公式英語版」、「JDK 1.6 API Java中国リファレンスマニュアル」、「JDK 1.5 API Java中国リファレンスマニュアル」をフォローできます。また、誰もがwulin.comをもっとサポートすることを願っています。