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 字符串排序的主要内容,如果未能解决你的问题,请参考以下文章