Untuk string, kombinasi angka dan surat, seperti "A20" dan "A9"; Hasilnya adalah "A20"> "A9". Dalam hal ini, hasil dari metode compareto Calling String bukanlah yang kami harapkan. Pada saat ini, Anda perlu menulis kelas Anda sendiri dan mengimplementasikan antarmuka yang dapat dikenakan untuk membandingkan. Ini adalah pertanyaan wawancara dari pertama kalinya, tetapi hanya ada satu ide pada waktu itu.
Ide:
1. Konversi string ke daftar yang berisi substring dan integer. (Saya tidak tahu cara membaginya secara langsung menggunakan metode spit String di sini?)
2. Bandingkan data daftar.
3. Jika hasil perbandingan dalam daftar sama, maka call string's compareto.
Implementasi Kode:
Paket TestSource; impor java.util.arraylist; impor java.util.list; / ** * * @author waston xu * @date 2011-4-15 10:48:21 AM */ kelas publik myString mengimplementasikan yang sebanding dengan <ryString> {string final private; Daftar Privat <PERBICARA> DAFTAR; public myString (string string) {this.string = string; trimstring2list (); } private void trimString2list () {list = new ArrayList <BOCPERT> (); Integer num = 0; StringBuffer SB = StringBuffer baru (); untuk (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 = StringBuffer baru (); } num = num * 10 + (c - '0'); melanjutkan; } else {if (num! = 0) {list.add (num); num = 0; } SB.Append (c); melanjutkan; }} if (sb.length ()! = 0) {list.add (sb); SB = StringBuffer baru (); } else if (num! = 0) {list.add (num); num = 0; }} / * * Setelah dengan hati -hati menonton metode Compareto String, saya awalnya berencana untuk tidak memanggil API -nya untuk pemrograman, * Namun, mengingat terjadinya kasus "A02" dan "A2", saya masih menggunakan metode dalam API -nya untuk menyelesaikannya. */ 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) mengembalikan 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) {objek o1 = list.get (i); Objek o2 = anotherstring.list.get (i); if (o1 instance dari integer && o2 instance dari integer) {mark = (integer) o1 - (integer) o2; } else {mark = o1.toString (). compareto (o2.toString ()); } if (mark! = 0) return Mark; i ++; }} return compareTolikestring (anotherstring.string); // return string.compareto (anotherstring.string); / * Jika Anda menulis dengan cara ini, akan ada kerugian bahwa "A02" dan "A2", itu harus menjadi * // return string.length () - anotherstring.string.length (); } public static void main (string [] args) {string s1 = "b9c"; String s2 = "b09c"; MyString m1 = myString baru (s1); MyString m2 = myString baru (s2); System.out.println (M1.Compareto (M2)); }}Untuk melihat lebih banyak sintaks Java, Anda dapat mengikuti: "Berpikir dalam manual Cina Java", "JDK 1.7 Manual Referensi Versi Bahasa Inggris Resmi", "JDK 1.6 API Java Manual Referensi Cina", "JDK 1.5 API Java Manual Referensi Cina". Saya juga berharap semua orang akan lebih mendukung wulin.com.