java字符串排序 根据指定字符串字母顺序排序

m0_38106832 2019-05-16 09:14:35
如题,字符不重复且均为小写,根据串1字母顺序给串2排序 谢谢大家。
...全文
1542 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
m0_38106832 2019-05-16
  • 打赏
  • 举报
回复
谢谢各位的指点!
qq_40674493 2019-05-16
  • 打赏
  • 举报
回复
6楼是用了串1字符对应索引的顺序进行排序,这个想法很巧妙,不错。
多出来的字符,indexof会返回-1,比所有的索引值都小,所以放前面了。加了我写的那两句代码,就比其它字符的索引值都大,就会放最后了。
qq_40674493 2019-05-16
  • 打赏
  • 举报
回复
把sort改一下就行了。

// 排序
arr.sort((a, b) -> {
int idx1 = sort.indexOf((char) a);
int idx2 = sort.indexOf((char) b);
if (idx1 < 0) {
idx1 = sort.length();
}
if (idx2 < 0) {
idx2 = sort.length();
}
return idx1 - idx2;
});
m0_38106832 2019-05-16
  • 打赏
  • 举报
回复
引用 8 楼 水边2 的回复:
排序关键在sort的那个匿名函数里, return idx1 - idx2 的结果: 1、如果大于0,表示 a>b 2、如果小于0,表示 a<b 3、如果等于0,表示 a=b 你尝试修改一下结果试试。
谢谢,看不太懂这个用法。。
游北亮 2019-05-16
  • 打赏
  • 举报
回复
排序关键在sort的那个匿名函数里, return idx1 - idx2 的结果: 1、如果大于0,表示 a>b 2、如果小于0,表示 a<b 3、如果等于0,表示 a=b 你尝试修改一下结果试试。
m0_38106832 2019-05-16
  • 打赏
  • 举报
回复
引用 6 楼 水边2 的回复:

String sort = "badcfehg"; // 字母顺序
String str = "aabbccddeeffgghh"; // 待排序字符串

List arr = new ArrayList();
for (char ch : str.toCharArray())
    arr.add(ch);

// 排序
arr.sort((a, b) -> {
    int idx1 = sort.indexOf((char) a);
    int idx2 = sort.indexOf((char) b);
    return idx1 - idx2;
});
StringBuilder sb = new StringBuilder();
for(Object ch : arr){
    sb.append(ch);
}
System.out.println(sb);
// 输出 bbaaddccffeehhgg
刚才试了一下,如果待排序字符串有另一字符串没有的字符,则这些字符会在排序好的字符前面输出,能放到后面输出吗
游北亮 2019-05-16
  • 打赏
  • 举报
回复

String sort = "badcfehg"; // 字母顺序
String str = "aabbccddeeffgghh"; // 待排序字符串

List arr = new ArrayList();
for (char ch : str.toCharArray())
    arr.add(ch);

// 排序
arr.sort((a, b) -> {
    int idx1 = sort.indexOf((char) a);
    int idx2 = sort.indexOf((char) b);
    return idx1 - idx2;
});
StringBuilder sb = new StringBuilder();
for(Object ch : arr){
    sb.append(ch);
}
System.out.println(sb);
// 输出 bbaaddccffeehhgg
qq_40674493 2019-05-16
  • 打赏
  • 举报
回复
串1串2字母个数相等吗?串1串2字母相同吗?会不会有串1有a而串2没a这种情况?
m0_38106832 2019-05-16
  • 打赏
  • 举报
回复
谢谢 我实现下,您有时间能写下代码吗。
吃腻芒果冰 2019-05-16
  • 打赏
  • 举报
回复
引用 1 楼 吃腻芒果冰的回复:
继承Comparable重写比较函数或者用外比较器
我理解错了,初始化2个list,分别接收穿2,另一个作为排序后的串3,顺序遍历串1,在每个循环中将串1对应下标的字母与串2进行比较,相等的话串3add()这个字母并且串2remove().直到串2为空或者串1遍历结束停止循环。
吃腻芒果冰 2019-05-16
  • 打赏
  • 举报
回复
引用 1 楼 吃腻芒果冰的回复:
继承Comparable重写比较函数或者用外比较器
我理解错了,初始化2个list,分别接收穿2,另一个作为排序后的串3,顺序遍历串1,在每个循环中将串1对应下标的字母与串2进行比较,相等的话串3add()这个字母并且串2remove().直到串2为空或者串1遍历结束停止循环。
吃腻芒果冰 2019-05-16
  • 打赏
  • 举报
回复
继承Comparable重写比较函数或者用外比较器
qq_40674493 2019-05-16
  • 打赏
  • 举报
回复
a,b是形参,接收串1中的字符,sort.indexOf((char) a);再得到字符对应的索引,再把两个字符的索引的差作为返回值返回给List接口中的sort方法,sort方法根据这个返回值对串2进行排序。

这里用到了List接口,sort排序方法,Comparator接口,好好看看这三个的API说明。把这些看懂了。排序就彻底懂了。
m0_38106832 2019-05-16
  • 打赏
  • 举报
回复
引用 11 楼 qq_40674493 的回复:
6楼是用了串1字符对应索引的顺序进行排序,这个想法很巧妙,不错。 多出来的字符,indexof会返回-1,比所有的索引值都小,所以放前面了。加了我写的那两句代码,就比其它字符的索引值都大,就会放最后了。
请问一下 能详细说明这个函数的用法吗,这个a、b都是干嘛的

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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