Pour les chaînes, une combinaison de chiffres et de lettres, telles que "A20" et "A9"; Le résultat est "A20"> "A9". Dans ce cas, le résultat de l'appel de la méthode de comparaison de String n'est pas ce que nous espérons. Pour le moment, vous devez rédiger votre propre classe et implémenter l'interface contenue à comparer. Il s'agit d'une question d'entrevue de la première fois, mais il n'y avait qu'une seule idée à ce moment-là.
Idées:
1. Convertir la chaîne en une liste contenant une sous-chaîne et un entier. (Je ne sais pas comment le diviser directement en utilisant la méthode de la broche de String ici?)
2. Comparez les données de liste.
3. Si la comparaison se traduit par la liste est égale, appelez la compareto de la chaîne.
Implémentation du code:
Package TestSource; import java.util.arraylist; Importer java.util.list; / ** * * @author waston xu * @date 2011-4-15 10:48:21 AM * / public class MyString implémente comparable <MyString> {chaîne de chaîne finale privée; Liste privée <objet> liste; public myString (String String) {this.string = string; TrimString2List (); } private void TrimString2List () {list = new ArrayList <Bject> (); Entier 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'); continuer; } else {if (num! = 0) {list.add (num); num = 0; } sb.append (c); continuer; }} if (sb.length ()! = 0) {list.add (sb); sb = new StringBuffer (); } else if (num! = 0) {list.add (num); num = 0; }} / * * Après avoir soigneusement regardé la méthode de comparaison de String, j'ai initialement prévu de ne pas appeler son API pour la programmation, * Cependant, compte tenu de l'occurrence de cas "A02" et "A2", j'utilise toujours les méthodes de son API pour la résoudre. * / 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) Retour 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) {objet o1 = list.get (i); Objet o2 = anotherstring.list.get (i); if (o1 instanceOf Integer && o2 instanceof Integer) {mark = (entier) o1 - (entier) o2; } else {mark = o1.toString (). compareTo (o2.ToString ()); } if (Mark! = 0) RETOUR MARK; i ++; }} return comparetolikestring (anotherstring.string); // return string.compareto (anotherstring.string); / * Si vous écrivez de cette façon, il y aura un inconvénient que "A02" et "A2", ce doit être le petit * / // retour de retour 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)); }}Pour voir plus de syntaxe Java, vous pouvez suivre: "Penser dans Java Chinese Manual", "JDK 1.7 Reference Manual English Version", "JDK 1.6 API Java Chinese Reference Manual", "JDK 1.5 API Java Chinese Reference Manual". J'espère également que tout le monde soutiendra davantage Wulin.com.