英文字母和數字混合的字符串對象,如何排序?

tongle_deng 2010-04-29 12:01:40
例如:

String str1 = "D1" ;
String str2 = "D11" ;
String str3 = "D12" ;
String str4 = "D2" ;
String str5 = "D3" ;
String str6 = "H" ;
String str7 = "FO" ;
如何得到想要的結果: D1,D2,D3,D11,D12,F0,H
時間有點趕,有沒有現成的解決方案,謝謝大家!
...全文
665 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
tongle_deng 2010-06-09
  • 打赏
  • 举报
回复
搞定了,把代码贴下:
DetectContentOfSampleContent [] detectContentOfSampleContentArr2 = sample.getDetectContentOfSampleContentes().toArray(detectContentOfSampleContentArr1);
Comparator<DetectContentOfSampleContent> cmp = new Comparator<DetectContentOfSampleContent>() {

public int compare(DetectContentOfSampleContent str1, DetectContentOfSampleContent str2) {

if(str1.getDetect_of_content_shortname()==null||"null".equals(str1.getDetect_of_content_shortname())){
str1.setDetect_of_content_shortname("") ;
}
if(str2.getDetect_of_content_shortname()==null||"null".equals(str2.getDetect_of_content_shortname())){
str2.setDetect_of_content_shortname("");
}
String alphabet1 = str1.getDetect_of_content_shortname().replaceAll("\\d+$", "");
String alphabet2 = str2.getDetect_of_content_shortname().replaceAll("\\d+$", "");
int cmpAlphabet = alphabet1.compareToIgnoreCase(alphabet2);
if (cmpAlphabet != 0) {
return cmpAlphabet;
}

String numeric1 = str1.getDetect_of_content_shortname().replaceAll("^[a-zA-Z]+", "");
String numeric2 = str2.getDetect_of_content_shortname().replaceAll("^[a-zA-Z]+", "");
if ("".equals(numeric1)) {
return 1;
}
if ("".equals(numeric2)) {
return -1;
}
int num1 = Integer.parseInt(numeric1);
int num2 = Integer.parseInt(numeric2);
if(num1>num2){
return num1;
}
return num1 - num2 ;
}
};
不知道对大家有啥帮助没,可以讨论下
shine333 2010-04-29
  • 打赏
  • 举报
回复
    String[] array = new String[] {
"D1", "D11", "D12", "D13", "D2", "D3", "H", "F0", "h1", "h0", "f1",
"F2", "d9", "1"
};
// 假设所有情况都是字母在前,数字在后
Comparator<String> cmp = new Comparator<String>() {

public int compare(String str1, String str2) {

// 字母部分
String alphabet1 = str1.replaceAll("\\d+$", "");
String alphabet2 = str2.replaceAll("\\d+$", "");

// 如果不想区分大小写,否则compareTo
int cmpAlphabet = alphabet1.compareToIgnoreCase(alphabet2);
if (cmpAlphabet != 0) {
return cmpAlphabet;
}

// 数字部分
String numeric1 = str1.replaceAll("^[a-zA-Z]+", "");
String numeric2 = str2.replaceAll("^[a-zA-Z]+", "");
if ("".equals(numeric1)) {
// 即使numeric2也是空串也无所谓,当然,如果比较的不是String(或其他immutable对象)则另当别论
return -1;
}
if ("".equals(numeric2)) {
return 1;
}
int num1 = Integer.parseInt(numeric1);
int num2 = Integer.parseInt(numeric1);
return num1 - num2;
}
};
Arrays.sort(array, cmp);

System.out.println(Arrays.toString(array));
}
howsun_zh 2010-04-29
  • 打赏
  • 举报
回复

String ss[] = {"D12","D2","D03","B","D11","D8","D12","H","F0"};
Arrays.sort(ss);
for(String s : ss){
System.out.print(s+",");
}

out->B,D03,D11,D12,D12,D2,D8,F0,H,
shine333 2010-04-29
  • 打赏
  • 举报
回复
恭喜。
可惜我不用QQ,你直接再这里加好友好了。
tongle_deng 2010-04-29
  • 打赏
  • 举报
回复
to shine333:

謝謝你,“授人以渔的地方”提醒了我,今天心情太浮躁了!
呵呵,我的工資也不高,給你怕你不要,還是我自己留著吧,哈哈!

在你的基礎上已經修改成功了,不過除了這個,我又學到了些其他東西,可能要補下基礎了!
QQ:120222126,希望可以和你交個朋友!
神之泪花 2010-04-29
  • 打赏
  • 举报
回复
1,2楼的代码楼主试过没有,

shine333 2010-04-29
  • 打赏
  • 举报
回复
不知道,我的理解有什么很严重的问题,难道,你是想,
代码: String str1 = "..."; String str2 ... String strx = "..." 得到String str = "xxx,xxx,xxx,xxx,xxx";

如果没有理解错的话,上面的代码,关键步骤已经给出。这里是授人以渔的地方。剩下的如果还不能理解,就是资质问题了。
如果要手把手把所有代码贴出,那么请先双手奉上您的工资。
tongle_deng 2010-04-29
  • 打赏
  • 举报
回复
請看準了題目再幫我解決問題,謝謝!

67,517

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧