Java字母加數(shù)字組合比較大小
針對(duì)字符串是數(shù)字和字母結(jié)合而進(jìn)行的,如"a20"和"a9";比較而得出結(jié)果是"a20">"a9"。這種情況直接調(diào)用String的compareTo方法得出的結(jié)果是不是我們希望的。這個(gè)時(shí)候就需要寫自己的類并且實(shí)現(xiàn)Comarable接口來(lái)進(jìn)行比較。這個(gè)是來(lái)源一次的面試題目,但是當(dāng)時(shí)只有個(gè)思路。
思路:
1.轉(zhuǎn)換String為包含substring和Integer的list。(這里用String的spit方法直接拆分不知道怎么做?)
2.將list的數(shù)據(jù)進(jìn)行比較。
3.如果list中的比較結(jié)果相等,再調(diào)用String的compareTo。
代碼實(shí)現(xiàn):
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;
}
}
/*
* 在仔細(xì)的觀看了String的compareTo方法后,本來(lái)打算不調(diào)用其API進(jìn)行編程,
* 但是考慮到出現(xiàn)"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);
/* 如果這樣寫會(huì)有個(gè)弊端就是出現(xiàn)"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的語(yǔ)法,大家可以關(guān)注:《Thinking in Java 中文手冊(cè)》、《JDK 1.7 參考手冊(cè)官方英文版》、《JDK 1.6 API java 中文參考手冊(cè)》、《JDK 1.5 API java 中文參考手冊(cè)》,也希望大家多多支持腳本之家。
- Java實(shí)現(xiàn)的Excel列號(hào)數(shù)字與字母互相轉(zhuǎn)換功能
- Java簡(jiǎn)單統(tǒng)計(jì)字符串中漢字,英文字母及數(shù)字?jǐn)?shù)量的方法
- Java統(tǒng)計(jì)輸入字符的英文字母、空格、數(shù)字和其它
- Java生成含字母和數(shù)字的6位隨機(jī)字符串
- Java正則表達(dá)式過(guò)濾出字母、數(shù)字和中文
- java生成字母數(shù)字組合的隨機(jī)數(shù)示例 java生成隨機(jī)數(shù)
- Java 隨機(jī)生成驗(yàn)證碼(支持大小寫字母、數(shù)字、隨機(jī)字體)的實(shí)例
- java基礎(chǔ)-給出一個(gè)隨機(jī)字符串,判斷有多少字母?多少數(shù)字?
相關(guān)文章
Java連接Oracle數(shù)據(jù)庫(kù)實(shí)例解析
數(shù)據(jù)庫(kù)的操作是當(dāng)前系統(tǒng)開(kāi)發(fā)必不可少的開(kāi)發(fā)部分之一。接下來(lái)通過(guò)本文給大家介紹Java連接Oracle數(shù)據(jù)庫(kù)實(shí)例解析,非常不錯(cuò)具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧2016-06-06
Java動(dòng)態(tài)代理的兩種實(shí)現(xiàn)方式詳解【附相關(guān)jar文件下載】
這篇文章主要介紹了Java動(dòng)態(tài)代理的兩種實(shí)現(xiàn)方式,結(jié)合實(shí)例形式分析了java動(dòng)態(tài)代理的相關(guān)原理、實(shí)現(xiàn)方法與操作技巧,并附帶相關(guān)jar文件供讀者下載,需要的朋友可以參考下2019-03-03
Java EE項(xiàng)目中的異常處理總結(jié)(一篇不得不看的文章)
什么是異常?運(yùn)行時(shí)發(fā)生的可被捕獲和處理的錯(cuò)誤。這篇文章主要介紹了Java EE項(xiàng)目中的異常處理總結(jié),有需要的可以了解一下。2016-11-11
SpringBoot如何使用@Aspect注解實(shí)現(xiàn)AOP
這篇文章主要介紹了SpringBoot如何使用@Aspect注解實(shí)現(xiàn)AOP問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
解決Spring Data Jpa 實(shí)體類自動(dòng)創(chuàng)建數(shù)據(jù)庫(kù)表失敗問(wèn)題
這篇文章主要介紹了解決Spring Data Jpa 實(shí)體類自動(dòng)創(chuàng)建數(shù)據(jù)庫(kù)表失敗問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
Spring MVC的參數(shù)綁定和返回值問(wèn)題
這篇文章主要介紹了Spring MVC的參數(shù)綁定和返回值問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02

