بالنسبة للسلاسل ، مجموعة من الأرقام والحروف ، مثل "A20" و "A9" ؛ والنتيجة هي "A20"> "A9". في هذه الحالة ، فإن نتيجة استدعاء طريقة مقارنات String ليست ما نأمل. في هذا الوقت ، تحتاج إلى كتابة الفصل الخاص بك وتنفيذ الواجهة القابلة للاتصال للمقارنة. هذا سؤال مقابلة من المرة الأولى ، ولكن كانت هناك فكرة واحدة فقط في ذلك الوقت.
الأفكار:
1. تحويل السلسلة إلى قائمة تحتوي على فرعية وتكوين عدد صحيح. (لا أعرف كيفية تقسيمها مباشرة باستخدام طريقة البصق في String هنا؟)
2. قارن بيانات القائمة.
3. إذا كانت المقارنة تؤدي إلى القائمة متساوية ، فإن Call String's Compareto.
تنفيذ الكود:
حزمة TestSource ؛ استيراد java.util.arraylist ؛ استيراد java.util.list ؛ / ** * * Author Waston Xu * date 2011-4-15 10:48:21 AM */ Public Class MyString أدوات قابلة للمقارنة <Mstring> {سلسلة سلسلة نهائية خاصة ؛ قائمة خاصة <Object> ؛ MyString العامة (سلسلة سلسلة) {this.string = string ؛ TrimString2List () ؛ } private void trimstring2List () {list = new ArrayList <Object> () ؛ عدد صحيح = 0 ؛ StringBuffer SB = New StringBuffer () ؛ لـ (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') ؛ يكمل؛ } آخر {if (num! = 0) {list.add (num) ؛ num = 0 ؛ } sb.append (c) ؛ يكمل؛ }} if (sb.length ()! = 0) {list.add (sb) ؛ sb = new StringBuffer () ؛ } آخر إذا (num! = 0) {list.add (num) ؛ num = 0 ؛ }} / * * بعد مشاهدة طريقة مقارنات String بعناية ، خططت في الأصل عدم استدعاء 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 ؛ بينما (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 ؛ بينما (i <n) {object o1 = list.get (i) ؛ Object O2 = Anotherstring.list.get (i) ؛ if (O1 extryof integer && o2 extryof integer) {mark = (integer) o1 - (integer) o2 ؛ } آخر {mark = o1.toString (). compareto (o2.toString ()) ؛ } if (mark! = 0) return mark ؛ i ++ ؛ }} return comparetolikestring (Anotherstring.String) ؛ // return string.comPareto (Anotherstring.string) ؛ ؟ } public static void main (string [] args) {string s1 = "b9c" ؛ السلسلة S2 = "B09C" ؛ myString M1 = جديد mystring (S1) ؛ myString M2 = جديد mystring (S2) ؛ System.out.println (M1.compareto (M2)) ؛ }}لعرض المزيد من بناء جملة Java ، يمكنك متابعة: "التفكير في Java Chinese Manual" ، "JDK 1.7 المرجعية النسخة الإنجليزية الرسمية" ، "JDK 1.6 API Java الصينية المرجعية" ، "JDK 1.5 API Java الصينية المرجعية". آمل أيضًا أن يدعم الجميع wulin.com أكثر.