【问题标题】:Sorting the string value with empty space用空格对字符串值进行排序
【发布时间】:2012-11-01 23:18:20
【问题描述】:

我正在学习 JAVA,我有一个关于排序字符串的问题。

在字符串ArrayList中 我们的字符串值 STRUCTURE 是 "0" + " " + "some string"

例如,

     | String
     | 0 AA
     | 1 BB
     | 2 AA
     | 3 AA
     | 4 CC
     | 5 BB

当我们对它进行排序时,结果应该是

     | String 
     | 0 AA
     | 2 AA
     | 3 AA
     | 1 BB
     | 5 BB
     | 4 CC

如何使用“数字字符串”+“”+“字符串”对字符串进行排序

谢谢

更新:

我测试过代码 1 AA
2 AA
3 BBB
4 抄送
5 BBB
6 AA
7 BBB
8 CC
9 ZZZ
10QQ

我得到了

0 AA

1 AA

5 AA

4 BBB

2 BBB

6 BBB

3 抄送

7 抄送

9QQ

8 ZZZ

【问题讨论】:

  • OP,请不要接受我的答案,并接受 ARS 发布的答案,因为它比我的效率高,所以我可以删除我的答案。:)

标签: java string sorting


【解决方案1】:

扩展Comparator 解决方案(这确实是解决此问题的方法):

Collections.sort(yourList, new Comparator<String>() {
    @Override
    public int compare(String s1, String s2) {
        String[] split1 = s1.split(" ");
        String[] split2 = s2.split(" ");

        int n = split1[1].compareTo(split2[1]);

        if (n == 0) {
            return Integer.valueOf(split1[0]).compareTo(
                                  Integer.valueOf(split2[0]));
        }

        return n;
    }
});

【讨论】:

    【解决方案2】:

    使用Collections.sort(List, Comparator)。您需要提供自己的 Comparator 实现,它实现了您的排序要求。

    【讨论】:

      【解决方案3】:

      我在编码时确实考虑了空间和时间复杂度。我不太确定它是否足够高效,但它会给你一个想法。

        List<String> l = new ArrayList<>();
      
              l.add("0 CC");
              l.add("1 BB");
              l.add("2 AA");
              l.add("3 AA");
      
          String str="";
          for(String s: l){
              str+=s+",";
          }
          String[] sArr = str.split(",");
          String temp="";
          for(int i=0; i<sArr.length;i++) {
              for(int j= i+1; j<sArr.length;j++){
                  if(sArr[i].split("\\s")[1].compareToIgnoreCase(sArr[j].split("\\s")[1])>0){
                      temp= sArr[j];
                      sArr[j]= sArr[i];
                      sArr[i]=temp;
                  }
              }
          }
          for(String g: sArr){
              System.out.println(g);
          }
      
      output:
      2 AA
      3 AA
      1 BB
      0 CC
      

      【讨论】:

      • 这是一个非常糟糕的解决方案。事实上,我怀疑它是否适用于所有情况!
      • @Muel 它确实适用于给定的输入。你能推荐任何其他解决方案吗???.. idint 在编码时确实考虑了空间和时间复杂度
      • 我测试了你的代码,我得到了结果,我基本上很好,但是 BBB 部分有订单问题。大声笑,但谢谢! (我在上面更新了我的问题和代码测试结果)
      • @DcRedwing 我相信这可以比我的代码更优雅地完成。但我只是给你一个想法。我对downvote很好,如果他们也发表评论就好了:)
      • 这段代码的问题在于(如果它确实有效,我并不是说它无效)它将真的难以在未来。最好使用Comparator
      猜你喜欢
      • 2015-12-05
      • 1970-01-01
      • 1970-01-01
      • 2021-03-30
      • 1970-01-01
      • 2019-05-08
      • 2015-11-27
      • 1970-01-01
      • 2022-12-09
      相关资源
      最近更新 更多