Java字母加數字組合比擬年夜小。本站提示廣大學習愛好者:(Java字母加數字組合比擬年夜小)文章只能為提供參考,不一定能成為您想要的結果。以下是Java字母加數字組合比擬年夜小正文
針對字符串是數字和字母聯合而停止的,如"a20"和"a9";比擬而得出成果是"a20">"a9"。這類情形直接挪用String的compareTo辦法得出的成果是否是我們願望的。這個時刻就須要寫本身的類而且完成Comarable接口來停止比擬。這個是起源一次的面試標題,然則其時只要個思緒。
思緒:
1.轉換String為包括substring和Integer的list。(這裡用String的spit辦法直接拆分不曉得怎樣做?)
2.將list的數據停止比擬。
3.假如list中的比擬成果相等,再挪用String的compareTo。
代碼完成:
package testsource;
import java.util.ArrayList;
import java.util.List;
/**
*
* @author Waston Xu
* @date 2011-4-15 上午10:48:21
*/
public class MyString implements Comparable<MyString> {
private final String string;
private List<Object> list;
public MyString(String string) {
this.string = string;
trimString2List();
}
private void trimString2List() {
list = new ArrayList<Object>();
Integer 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');
continue;
} else {
if (num != 0) {
list.add(num);
num = 0;
}
sb.append(c);
continue;
}
}
if (sb.length() != 0) {
list.add(sb);
sb = new StringBuffer();
} else if (num != 0) {
list.add(num);
num = 0;
}
}
/*
* 在細心的不雅看了String的compareTo辦法後,原來盤算不挪用其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);
Object o2 = anotherString.list.get(i);
if (o1 instanceof Integer && o2 instanceof 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);
/* 假如如許寫會有個弊病就是湧現"a02"和"a2"如許的情形,確定是後面的小*/
//return string.length() - anotherString.string.length();
}
public static void main(String[] args) {
String s1 = "b9c";
String s2 = "b09c";
MyString m1 = new MyString(s1);
MyString m2 = new MyString(s2);
System.out.println(m1.compareTo(m2));
}
}
檢查更多Java的語法,年夜家可以存眷:《Thinking in Java 中文手冊》、《JDK 1.7 參考手冊官方英文版》、《JDK 1.6 API java 中文參考手冊》、《JDK 1.5 API java 中文參考手冊》,也願望年夜家多多支撐。