java 字符串排序

字符串的默认排序规则为:按Ascii码的大小排序
如:{"ab","wang","hi","a","abff"}
排序后为: {"a","ab", "abff", "hi", "wang"}
请使用Comparable接口和Arrays类,编写程序,改变字符串的排序规则,新规则为:先按字符串的长度,再按Ascii码的大小排序。
排序后为: {"a","ab", "hi", "abff", "wang "}

//这个绝对满足您的要求
import java.util.Arrays;

public class StringSort {
public static void main(String[] args) {
String ss[]={"ab","wang","hi","a","abff"};
MyString mySs[]=new MyString[ss.length];//创建自定义排序的数组
for (int i = 0; i < ss.length; i++) {
mySs[i]=new MyString(ss[i]);
}
Arrays.sort(mySs);//排序
for (int i = 0; i < mySs.length; i++) {
System.out.println(mySs[i].s);
}
}

}

class MyString implements Comparable<MyString>{
public String s;//包装String

public MyString(String s) {
this.s = s;
}

@Override
public int compareTo(MyString o) {
if(o==null||o.s==null) return 1;
if(s.length()>o.s.length()) return 1;
else if(s.length()<o.s.length()) return -1;
return s.compareTo(o.s);
}
}

参考资料:还有其他问题的话,给我发百度消息

温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-05-18
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Sorter {
public static void main(String[] args) {
List<String> strs = new ArrayList<String>();
strs.add("aa2");
strs.add("aa100");
strs.add("aa1");
strs.add("aa10");
strs.add("aa78");
System.out.println(strs);
// 用了一个Comparetor
Comparator<String> com = new Comparator<String>() {
public int compare(String o1, String o2) {
// 前面3个IF主要是判空的
if (o1 == o2) {
return 0;
}
if (o1 == null) {
return 1;
}
if (o2 == null) {
return -1;
}
// 这里没有做太多的判断, index 代表第几个开始是数字, 直接从后面遍历
// 比如 aa11, 我们就会判断从下标[2]开始为不是数字, 就直接截取 [2] 后面, 即11
int index = 0;
for (index = o1.length() - 1; index >= 0
&& (o1.charAt(index) >= '0' && o1.charAt(index) <= '9'); index--)
;
int num1 = Integer.parseInt(o1.substring(index + 1));

for (index = o2.length() - 1; index >= 0
&& (o2.charAt(index) >= '0' && o2.charAt(index) <= '9'); index--)
;
int num2 = Integer.parseInt(o2.substring(index + 1));
return num1 - num2;
}
};
Collections.sort(strs, com);
System.out.println(strs);
}
}
第2个回答  2019-09-11
public
class
stringsort
{
public
static
void
main(string
[]args)
{
string[]
s={"a","b","c","d","m","f"};
for(int
i=s.length-1;i>=1;i--){
for(int
j=0;j<=i-1;j++)
{
if(s[j].compareto(s[j+1])<0)
{
string
temp=null;
temp=s[j];
s[j]=s[j+1];
s[j+1]=temp;
}
}
}
for(string
a:s){
system.out.print(a+"
");
}
}
}
不用compareto就比较麻烦了,比较字符串的实质是比较字符串的字母,首字母相同,比较下一个,然后又相同的话,再下一个....所以你可以先用substring();截出第一个字符,然后再比较,相同的再截第二个,.....
有好的方法提供给你了,你就直接用,不要把简单的问题复杂化,只要知道就行了,就比如字符串的比较实质是先比第一个字母,再第二个一样,若实在是要进行再细一方面怎么排序,可以查看api文档,看字符串有哪些方法,再在这些方法的基础上自己动手去写,还不是一样写的出,但这针对你的这个问题,就落下乘了,你想想就觉得有点复杂吧!
第3个回答  2019-08-27
楼主你好!
通过字符串与字符之间的转换就行了!!
package
com.student.www;
import
java.util.*
;
public
class
TestString
{
public
static
void
main(String[]
args)
{
String
str
=
"ABLDNasdasd"
;
char[]
ch
=
str.toCharArray()
;
//字符串转换成字符数组
Arrays.sort(ch)
;
//数组排序
System.out.println(Arrays.toString(ch))
;//
此处以数组形式输出
}
}
第4个回答  2010-05-18
楼上给的算法和需求不一致啊。。。
不过大概思路就是这样了。
加一个o1.length 与 o2.length的大小判断就可以了。
相似回答