Para cordas, uma combinação de números e letras, como "A20" e "A9"; O resultado é "A20"> "A9". Nesse caso, o resultado de chamar o método compareto da String não é o que esperamos. Neste momento, você precisa escrever sua própria classe e implementar a interface comum para comparar. Esta é uma pergunta de entrevista desde a primeira vez, mas havia apenas uma idéia naquela época.
Ideias:
1. Converta a string em uma lista contendo substring e número inteiro. (Não sei como dividi -lo diretamente usando o método de cuspe da String aqui?)
2. Compare os dados da lista.
3. Se a comparação resultar na lista for igual, ligue para o compareto da string.
Implementação de código:
pacote testsource; importar java.util.arraylist; importar java.util.list; / ** * * @author waston xu * @date 2011-4-15 10:48:21 am */ public classe mystring implementa comparável <mystring> {private final string string; Lista de Lista Privada <Object>; public myString (string string) {this.string = string; trimString2List (); } private void trimString2List () {list = new ArrayList <ject> (); Inteiro 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; }} / * * Depois de assistir cuidadosamente ao método Compareto da String, originalmente planejei não chamar sua API para programação, * no entanto, considerando a ocorrência de casos "A02" e "A2", ainda uso os métodos em sua API para resolvê -lo. */ private int compareTolikEstring (strings) {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) retorna C1 - C2; k ++; }} retornar Len1 - Len2; } @Override public int compareto (mystring anotherstring) {int len1 = list.size (); int len2 = anototherstring.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 = anototherstring.list.get (i); if (o1 instância do número inteiro && o2 Instância do número inteiro) {mark = (número inteiro) o1 - (inteiro) o2; } else {mark = o1.toString (). compareto (o2.toString ()); } if (mark! = 0) Retornar marca; i ++; }} retornar comparetolikEstring (anototherstring.string); // return string.compareto (anototherstring.string); / * Se você escrever dessa maneira, haverá uma desvantagem de que "A02" e "A2", deve ser o pequeno pequeno */// return string.length () - anotherstring.string.length (); } public static void main (string [] args) {string s1 = "b9c"; String s2 = "b09c"; Mystring m1 = novo mystring (s1); Mystring m2 = novo mystring (s2); System.out.println (m1.comPareto (M2)); }}Para ver mais sintaxe Java, você pode seguir: "Pensando no manual chinês Java", "Manual de Referência JDK 1.7 Versão Oficial em Inglês", "JDK 1.6 API Java Chinese Reference Manual", "JDK 1.5 API Java Chinese Reference Manual". Eu também espero que todos apoiem mais wulin.com.