Für Zeichenfolgen eine Kombination aus Zahlen und Buchstaben wie "A20" und "A9"; Das Ergebnis ist "A20"> "A9". In diesem Fall ist das Ergebnis der Vergleichsmethode von String String nicht das, was wir hoffen. Zu diesem Zeitpunkt müssen Sie Ihre eigene Klasse schreiben und die kommerzielle Schnittstelle zum Vergleichen implementieren. Dies ist eine Interviewfrage vom ersten Mal, aber zu dieser Zeit gab es nur eine Idee.
Ideen:
1. Konvertieren Sie die Zeichenfolge in eine Liste, die Substring und Ganzzahl enthält. (Ich weiß nicht, wie ich es hier direkt mit der String -Spit -Methode aufteilt?)
2. Vergleichen Sie die Listendaten.
3. Wenn die Vergleichsergebnisse in der Liste gleich sind, rufen Sie den Vergleich von String auf.
Code -Implementierung:
Pakettestsource; Import Java.util.ArrayList; importieren java.util.list; / ** * * @author Waston Xu * @date 2011-4-15 10:48:21 AM */ Public Class MyString implementiert vergleichbar <MyString> {private endgültige String; private Liste <Object> Liste; public MyString (String String) {this.string = String; trimString2List (); } private void trimstring2List () {list = new ArrayList <Object> (); Ganzzahl num = 0; StringBuffer sb = new StringBuffer (); für (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'); weitermachen; } else {if (num! = 0) {list.add (num); Num = 0; } SB.Append (c); weitermachen; }} if (sb.length ()! = 0) {list.add (sb); sb = new StringBuffer (); } else if (num! = 0) {list.add (num); Num = 0; }} / * * Nachdem ich die Vergleichsmethode von String sorgfältig beobachtet hatte, hatte ich ursprünglich vor, seine API nicht zur Programmierung aufzurufen. */ private int vergleichetolikestring (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 vergleicheto (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) {Objekt O1 = list.get (i); Objekt O2 = AnotherString.List.get (i); if (o1 Instance von Integer && O2 Instance von Integer) {mark = (Integer) O1 - (Integer) O2; } else {mark = o1.toString (). vergleicheto (o2.toString ()); } if (mark! = 0) return marke; i ++; }} return vergleicheTolikestring (AnotherString.String); // return string.comPareto (anotherstring.String); / * Wenn Sie auf diese Weise schreiben, wird es einen Nachteil geben, dass "a02" und "a2" der vorherige kleine */// return String.length () - Anotherstring.string.length (); } public static void main (String [] args) {String s1 = "b9c"; String S2 = "B09C"; MyString M1 = neuer MyString (S1); Mystring M2 = neuer MyString (S2); System.out.println (m1.comPareto (M2)); }}Um mehr Java -Syntax anzuzeigen, können Sie folgen: "Denken in Java Chinese Manual", "JDK 1.7 Referenzhandbuch Offizieller Englischversion", "JDK 1.6 API Java Chinese Referenzhandbuch", "JDK 1.5 API Java Chinese Referenzhandbuch". Ich hoffe auch, dass jeder wulin.com mehr unterstützt.