문자열의 경우 "A20"및 "A9"와 같은 숫자와 문자의 조합; 결과는 "A20"> "A9"입니다. 이 경우 String의 비교 방법을 호출 한 결과는 우리가 희망하는 것이 아닙니다. 현재 자신의 수업을 작성하고 Commarable 인터페이스를 구현하여 비교해야합니다. 이것은 처음부터 인터뷰 질문이지만 그 당시에는 하나의 아이디어가있었습니다.
아이디어 :
1. 문자열을 서브 스트링 및 정수가 포함 된 목록으로 변환합니다. (여기서 String의 Spit Method를 사용하여 직접 분할하는 방법을 모르겠습니까?)
2. 목록 데이터를 비교하십시오.
3. 목록의 비교 결과가 같으면 문자열의 비교를 호출하십시오.
코드 구현 :
패키지 테스트 소스; java.util.arraylist 가져 오기; Java.util.list 가져 오기; / ** * * @Author Waston XU * @Date 2011-4-15 10:48:21 AM */ public class mystring empless <mystring> {private final String String; 비공개 목록 <bood> 목록; 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 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) 반환 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); Object o2 = Anotherstring.list.get (i); if (O1 인스턴스 인스턴스의 인스턴스 && o2 인스턴스 인스턴스) {mark = (정수) o1- (정수) o2; } else {mark = o1.toString (). 비교 (o2.toString ()); } if (mark! = 0) return mark; i ++; }} return comparetolikestring (anotherstring.string); // return string.compareto (anotherstring.string); / *이 방법을 작성하면 "A02"및 "A2"라는 단점이 있습니다. 이전의 작은 * // return string.length () - Anotherstring.string.length (); } 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 Syntax를 보려면 "Java Chinese Manual의 사고", "JDK 1.7 참조 설명서 공식 영어 버전", "JDK 1.6 API Java Chinese Reference Manual", "JDK 1.5 API Java Chinese Reference Manual"을 따라갈 수 있습니다. 또한 모두가 wulin.com을 더 지원하기를 바랍니다.