Для строк, сочетание чисел и букв, таких как «A20» и «A9»; Результатом является "A20"> "A9". В этом случае результат метода Calling String Strageto - это не то, что мы надеемся. В настоящее время вам нужно написать свой собственный класс и внедрить знаковый интерфейс для сравнения. Это вопрос интервью с первого раза, но в то время была только одна идея.
Идеи:
1. Преобразовать строку в список, содержащий подстроение и целое число. (Я не знаю, как разделить его непосредственно, используя здесь метод струны строки?)
2. Сравните данные списка.
3. Если сравнение приводит к тому, что в списке равны, то вызовите сравнение строки.
Реализация кода:
Пакет -тестирование; импортировать java.util.arraylist; импортировать java.util.list; / ** * * @author waston Xu * @date 2011-4-15 10:48:21 */ Общедоступный класс MyString Regrables сопоставимы <MyString> {Private Final String String; частный список <object> list; 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; }} / * * После тщательного просмотра метода сравнения строки я первоначально планировал не вызывать его 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) 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) {object o1 = list.get (i); Объект O2 = anotherstring.list.get (i); if (o1 ancessionof integer && o2 instanceof integer) {mark = (integer) o1 - (integer) o2; } else {mark = o1.toString (). CompareTo (o2.toString ()); } if (mark! = 0) return Mark; i ++; }} return comparetOlikesting (anotherstring.string); // return string.compareto (anotherstring.string); / * Если вы напишете таким образом, будет недостаток, что «A02» и «A2», это должны быть предыдущие маленькие */// return string.length () - anotherstring.string.length (); } public static void main (string [] args) {string s1 = "b9c"; String S2 = "b09c"; MyString M1 = новый MyString (S1); MyString M2 = новый MyString (S2); System.out.println (m1.compareto (M2)); }}Чтобы просмотреть больше синтаксиса Java, вы можете следовать: «Мысль в китайском руководстве Java», «JDK 1.7 Справочное руководство по английской версии», «Руководство по справочнику JDK 1.6 API Java», «Руководство JDK 1.5 API Java китайское справочное руководство». Я также надеюсь, что все будут поддерживать Wulin.com больше.