0 0

遇到一个java高难度排序问题,字母加数字混合,10

昨天这个问题没有得到解决,今天在些贴出求教..........
遇到一个java高难度排序问题,字母加数字混合,
要实现

1.先按字母
2.在按字符长度
3.如果是字母加数字的在按大小

下面list中的数据为如下;
000090
100001
A00001
A00002
A00003
A00004
A00005
A00006
a10
a12
a11
B001
B002
B003
B004
B005
B006
B10
B11

public List sortView() {   
List list=computerList();   
Collections.sort(list,new ClientIDComparator());   
}  


public class ClientIDComparator implements Comparator{   
  public int compare(Object computer1, Object computer2) {   
        String s1 = ((String) computer1).toLowerCase();   
        String s2 = ((String) computer2).toLowerCase();   
        if (s1.charAt(0) > s2.charAt(0)) {   
            return 1;   
        } else if (s1.charAt(0) < s2.charAt(0)) {   
            return -1;   
        } else {   
            if(s1.length()==s2.length())   
                return s1.compareTo(s2);   
            else if(s1.length()>s2.length())   
                return 1;   
            return 0;   
        }   
           
 }   
}  


现在目前还没有实现,求指教 
正确排序应该是 
000090 
100001 
a10 
a11 
a12 
A00001 
A00002 
A00003 
A00004 
A00005 
A00006 
B10 
B11 
B001 
B002 
B003 
B004 
B005 
B006 


--------------------------------------------
下面是昨天一位朋友给出的见意,这个排序需要进行三次吗?????
java本身的Comparator比较不做不到一次吗??

应该是
1.先按首字母
2.在按字符长度
3.如果是字母加数字的在按大小 
即第一条要先按首字母吧??
说下我的思路哈,我认为得进行3次排序:
1。第一次根据首字母进行排序,排序输出的是一个首字母递增的序列
2。对第一次排序结果进行二次排序,此时,设立游标,int j代表位置,char tmp代表每个字符串的首字母,分段排序(对首字母相同的字符串排序)

String[] arr=new String[]{"aaa"};
for(int i=0;i<arr.length;i++){ int="" j="i;" char="" tmp="arr[i].charAt(0);" while(j+1<arr.length){="" j++;="" char="" tmp1="arr[j].charAt(0);" if(tmp!="tmp1){" j--;="" break;="" }="" }="" if(j="">i){
for(int k=i;k<j;k++){ for(int="" z="k+1;z&lt;=j;z++){" string="" temp="arr[k];" string="" temp1="arr[z];" if(temp.length()="">temp1.length()){
arr[k]=temp1;
arr[k+1]=temp;
}
}

}
}
i=j;
}
3。这时满足需求的前2个,然后进行第三遍排序,思路和第二次差不多,多个int len保存长度,即在满足tmp(首字母)相等,len(长度)相等的字符串,按照大小排序。
当然,算法看上去好庞大,只是分享下思路,期待有更好的算法学习下。
flykete (初级程序员) 2008-09-03

问题补充:
是的对这些字符是可以正确的排序,但是在加些数字就不行了

如果全部是数字的就按长度排序,如果长度一样就按首字大小


000090
100001
2311
233
00032
1a002

上面这些是错误的排法,正确的是



233
2311
00032
1a002
000090
100001
a10
a11
a12
A00001
A00002
A00003
A00004
A00005
A00006
B10
B11
B001
B002
B003
B004
B005
B006

所以下面这个排法还是不行的

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

class Client implements Comparable {
String id;
public Client(String id){
this.id=id;
}
public int compareTo(Object arg0) {
Client c=(Client) arg0;
String s2 = c.id.toLowerCase();
String s1 = this.id.toLowerCase();
if (s1.charAt(0) > s2.charAt(0)) {
return 1;
} else if (s1.charAt(0) < s2.charAt(0)) {
return -1;
} else {
if(s1.length()==s2.length())
return s1.compareTo(s2);
else if(s1.length()>s2.length())
return 1;
return 0;
}
}
}

2008年9月04日 11:12

2个答案 按时间排序 按投票排序

0 0

你那个是正确的啊
贴一下我改的(基本没变的)

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

class Client implements Comparable {
	String id;
	public Client(String id){
		this.id=id;
	}
	public int compareTo(Object arg0) {
		Client c=(Client) arg0;
		String s2 = c.id.toLowerCase();     
        String s1 = this.id.toLowerCase();     
        if (s1.charAt(0) > s2.charAt(0)) {     
            return 1;
        } else if (s1.charAt(0) < s2.charAt(0)) {     
            return -1;
        } else {     
            if(s1.length()==s2.length())     
                return s1.compareTo(s2);     
            else if(s1.length()>s2.length())     
                return 1;     
            return 0;
        }     
	}
}


2008年9月04日 13:29
0 0

现在不是么?我这里跑了一下上面的程序,就是
000090
100001
a10
a11
a12
A00001
A00002
A00003
A00004
A00005
A00006
B10
B11
B001
B002
B003
B004
B005
B006
 

2008年9月04日 12:49

相关推荐

    Java 字母数字字符串 混合排序(绝对超值管用)

    List&lt;String&gt; location=new ArrayList(); 一行代码轻松搞定混合排序问题 Collections.sort(location, new SortUtils(true));

    汉字和数字混合排序

    在计算机科学领域,汉字和数字混合排序是一项挑战性任务,特别是在处理中文文本数据时。由于汉字与数字在数据结构和编码上的本质差异,混合排序需要特定的算法和技术来实现。以下将详细介绍汉字和数字混合排序的相关...

    关于中文英文混合排序javaDemo

    在Java编程语言中,处理中文和英文混合的排序问题是一个常见的需求,特别是在处理用户输入、数据库数据或文件名等场景。这个"关于中文英文混合排序javaDemo"的示例主要展示了如何实现这样的功能。让我们深入探讨一下...

    java字母数字混搭字符串排序.docx

    根据提供的文档标题“java字母数字混搭字符串排序”及其描述,本文将深入探讨如何在Java中实现对含有字母与数字混合的字符串进行排序的方法。这一技术对于处理包含字母和数字混合的数据集尤其有用,比如在KPI(关键...

    java随机生成数字和字母

    本文将通过一个简单的示例程序来介绍如何使用Java生成随机的字母。 #### 二、基础知识 在开始之前,我们需要了解以下几个基础概念: - **`java.util.Random`类**:Java中的`Random`类提供了一种方式来生成伪随机数...

    java中对单层json进行key字母排序

    `java中对单层json进行key字母排序`的标题指出了我们需要对一个单层JSONObject的键进行字母升序排序。描述提到这个资源可以直接在程序中使用,意味着提供了一个功能函数来实现这一操作。 在提供的代码中,可以看到...

    Java生成兑换码工具类(英文26个字母加数字随机生成)

    生成指定位数的兑换码,(数字、大写字母随机混排)+(数字、小写字母随机混排)+(小写字母与数字混排),三种方式生成兑换码!

    Java编程实现中英混合字符串数组按首字母排序的方法

    在Java编程中,有时我们需要对包含中英文的字符串数组进行排序,使得中英混合的字符串按照首字母(中文为拼音首字母)进行有序排列。在Java标准库中,`Arrays.sort(String[])`方法能对字符串数组进行排序,但是默认...

    一款自定义密码长度字母数字特殊符号组合的随机密码生成软件.exe

    一款自定义密码长度字母数字特殊符号组合的随机密码生成软件,随机字符、随机数字、随机密码生成工具高强度随机密码生成器:可自定义生成随机数字、大小写字母、特殊字符的随机密码生成工具随机字符生成器:支持纯...

    java识别验证码 仅限字母数字 附带bmp图片

    如果验证码仅限字母和数字,可以构建一个简单的字符分类器,如基于神经网络的模型,对常见的26个英文字母和10个数字进行训练。 5. 结果验证:识别出的字符会组成一个字符串,与用户输入的验证码进行比对,若一致则...

    Java实现按照大小写字母顺序排序的方法

    Java实现按照大小写字母顺序排序的方法是编程中一个常见的问题,本文将详细介绍如何使用Java实现按照大小写字母顺序排序的方法。涉及到Java数组遍历、编码转换、判断等相关操作技巧。 首先,我们需要了解为什么需要...

    Java实现按中文首字母排序的具体实例

    本文将详细解释如何使用Java实现按中文首字母排序。 首先,Java标准库提供了一个强大的工具类——`java.util.Arrays`,它包含了一系列用于操作数组的方法,其中包括排序功能。`Arrays.sort()`函数就是其中的关键,...

    输入一个字符串,统计出这个字符串的英文大写字母、小写字母、数字、空格以及其它字符的个数

    输入一个字符串,统计出这个字符串的英文大写字母、小写字母、数字、空格以及其它字符的个数

    Java随机字符串生成器,可用于生成随机密码,密约等场景,支持字符范围配置(如只允许数字,只允许字母,只允许数字字母,特殊字符等混合配置)

    Java随机字符串生成器,可用于生成随机密码,加密算法密约(AES,RSA等)等场景,支持可选字符范围配置(如只允许数字,只允许字母,只允许数字字母,特殊字符等混合配置),即在选择的字符范围内去实现随机字符串...

    tesseract-ocr- 的字母数字识别

    6. **社区支持**:作为开源项目,Tesseract拥有活跃的社区,用户可以在遇到问题时获取帮助,同时也可以贡献代码改进项目。 在提供的文件列表中,我们可以看到一些关键文件: - `Sample.dproj.2007`:这是Delphi...

    java一亿数字取前100个(3秒钟获取)

    1. **优先队列(Priority Queue)**:Java中的`java.util.PriorityQueue`是一个无界优先队列,基于二叉堆实现。它支持O(log n)时间复杂度的插入和删除操作,是解决此类问题的理想选择。我们可以将队列设置为大小为...

    Android 联系人字母排序(仿微信)

    在Android开发中,实现联系人字母排序,尤其是仿微信的字母栏导航功能,是一个常见的需求。这个DEMO项目就是专门针对这一功能进行演示的。在本文中,我们将深入探讨如何在Android应用中实现类似微信的联系人字母排序...

    Android ListView的字母索引排序和搜索

    为了让用户能快速跳转到指定的字母部分,可以添加一个字母索引栏。用户点击字母时,ListView滚动到对应位置。 1. 创建字母索引列表:创建一个包含所有可能出现的首字母的列表,如A-Z。 2. 实现OnScrollListener:...

    Java小游戏之数字彩虹雨

    这个小游戏旨在为初学者提供一个实践Java编程、图形用户界面(GUI)设计以及动画制作的平台,同时也为有经验的开发者提供了一种有趣的编程挑战。 在Java中实现数字彩虹雨的关键技术包括: 1. **Java基础**:首先,...

    java程序设计实现统计英文文献字母出现频率,画直方图

    在这个过程中,可以创建一个二维数组或哈希表(如`HashMap, Integer&gt;`)来存储每个字母及其出现的次数。遍历读取到的文本,对每个字符进行计数,如果遇到非字母字符则忽略。对于大小写处理,可以先统一转换为小写,...

Global site tag (gtag.js) - Google Analytics