Para cuerdas, una combinación de números y letras, como "A20" y "A9"; El resultado es "A20"> "A9". En este caso, el resultado de llamar al método Compareto de la cadena no es lo que esperamos. En este momento, debe escribir su propia clase e implementar la interfaz comprable para comparar. Esta es una pregunta de la entrevista por primera vez, pero solo había una idea en ese momento.
Ideas:
1. Convierta la cadena en una lista que contiene subcadena e entero. (¿No sé cómo dividirlo directamente usando el método SPIT de String aquí?)
2. Compare los datos de la lista.
3. Si los resultados de la comparación en la lista son iguales, entonces llame al comparación de cadena.
Implementación del código:
paquete TestSource; import java.util.arrayList; import java.util.list; / ** * * @author Waston Xu * @Date 2011-4-15 10:48:21 AM */ public class MyString implementa comparable <MyString> {cadena de cadena final privada; Lista de lista privada <S Object>; public myString (String String) {this.string = string; TrimString2List (); } private void trimString2List () {list = new ArrayList <S Object> (); Entero 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'); continuar; } else {if (num! = 0) {list.add (num); num = 0; } sb.append (c); continuar; }} if (sb.length ()! = 0) {list.add (sb); sb = new StringBuffer (); } else if (num! = 0) {list.add (num); num = 0; }} / * * Después de observar cuidadosamente el método Compareto de String, originalmente planeé no llamar a su API para la programación, * Sin embargo, considerando la ocurrencia de casos "A02" y "A2", todavía uso los métodos en su API para resolverlo. */ 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) return 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) {objeto o1 = list.get (i); Objeto o2 = anotherstring.list.get (i); if (o1 instanciaf integer && o2 instanceOf integer) {mark = (integer) o1 - (integer) o2; } else {mark = o1.ToString (). CompareTo (O2.ToString ()); } if (marca! = 0) marca de retorno; i ++; }} return Comparetolikestring (anotherstring.string); // return String.compareto (anotherstring.string); / * Si escribe de esta manera, habrá una desventaja de que "a02" y "a2", debe ser el pequeño anterior */// return string.length () - anotherstring.string.length (); } public static void main (string [] args) {string s1 = "b9c"; Cadena s2 = "B09c"; MyString M1 = nuevo MyString (S1); MyString M2 = nuevo MyString (S2); System.out.println (M1.compareto (M2)); }}Para ver más sintaxis de Java, puede seguir: "Pensar en el manual de chino Java", "JDK 1.7 Manual de referencia Versión oficial de inglés", "JDK 1.6 Manual de referencia chino API Java", "JDK 1.5 API Java Manual de referencia chino". También espero que todos apoyen más a Wulin.com.