java 字符串排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);

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

参考技术A 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);

参考技术B 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文档,看字符串有哪些方法,再在这些方法的基础上自己动手去写,还不是一样写的出,但这针对你的这个问题,就落下乘了,你想想就觉得有点复杂吧!
参考技术C 楼主你好!
通过字符串与字符之间的转换就行了!!
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))
;//
此处以数组形式输出

参考技术D 楼上给的算法和需求不一致啊。。。
不过大概思路就是这样了。
加一个o1.length 与 o2.length的大小判断就可以了。

leetcode.排序.451根据字符出现频率排序-Java

1. 具体题目

给定一个字符串,请将字符串里的字符按照出现的频率降序排列。

示例 1:  输入: "tree"  输出: "eert"  解释: \'e\'出现两次,\'r\'和\'t\'都只出现一次。因此\'e\'必须出现在\'r\'和\'t\'之前。此外,"eetr"也是一个有效的答案。

2.思路分析

桶排序,思路同 leetcode347(https://www.cnblogs.com/XRH2019/p/11959468.html)

注意:向字符串中添加字符用 StringBuffer,直接用"string" + char 会超出时间限制

3. 代码

 1 public String frequencySort(String s) {
 2         HashMap<Character,Integer> map = new HashMap<>();
 3         for(int i = 0; i < s.length(); i++){
 4             char c = s.charAt(i);
 5             map.put(c, map.getOrDefault(c,0) + 1);
 6         }
 7         List<Character>[] frequency = new ArrayList[s.length() + 1];
 8         for(char key : map.keySet()){
 9             int index = map.get(key);
10             if(frequency[index] == null){
11                 frequency[index] = new ArrayList<>();
12             }
13             frequency[index].add(key); 
14         }
15         StringBuffer ans = new StringBuffer();
16         for(int i = frequency.length - 1; i >= 0; i--){
17             if(frequency[i] == null) continue;
18             for(char c : frequency[i]){
19                 for(int count = 0; count < i; count++){
20                     ans.append(c);
21                 }
22             }
23         }
24         return ans.toString();
25     }

 

 

以上是关于java 字符串排序的主要内容,如果未能解决你的问题,请参考以下文章

Java怎么按照汉字字典顺序给字符串排序?

Java中treeset怎么对字符串排序,对整形数值进行排序可以按照从小到大排序,若是对字符串排序该怎么排序

Java中怎么对数组中的字符串进行排序

Java Unicode 字符串排序

JAVA按着字典顺序排序

Java入门100例14.字符串排序——compareTo()