在Java中按升序1,2,4,5,8,9,13对字符串"13,5,8,4,2,1,9"进行排序

moh*_*han 14 java sorting

如何"13,5,8,4,2,1,9"按升序对字符串进行排序1,2,4,5,8,9,13

Jon*_*eet 27

  • 用逗号分隔字符串
  • 将每个子字符串解析为整数
  • 对结果集合进行排序
  • 如果您需要将结果作为字符串(它不清楚),请将每个整数转换回字符串并使用逗号将它们连接在一起.

如果这些步骤中的任何一个导致您遇到困难,请更具体.


Mar*_*tos 14

  1. 将其拆分为一个项目数组String.split().
  2. 转换为数字数组Integer.valueOf().
  3. 对数组进行排序.
  4. 将它全部连接成一个StringBuilder.

  • 我使用StringBuilder; 这里不需要产生线程同步的开销. (4认同)

Jor*_*orn 8

作为一个班轮,使用谷歌收藏(更新凯文的建议)

Joiner.on(",").join(Ordering.natural().onResultOf(new Function<String, Integer>() {
    @Override
    public Integer apply(String from) {
        return Integer.valueOf(from);
    }
}).sortedCopy(Arrays.asList("4,2,7,9,1".split(","))));
Run Code Online (Sandbox Code Playgroud)
  • 拆分使用 String.split()
  • 转换为Integer使用a Function(任何人都知道某个地方是否存在常量?)
  • 使用TreeSet自然排序进行排序
  • 加入零件并转换回String使用Joiner

(旧版)

Joiner.on(',').join(
    Sets.newTreeSet(
        Iterables.transform(
            Arrays.asList("13,5,8,4,2,1,9".split(",")),
            new Function<String, Integer>() {
                @Override
                public Integer apply(String from) {
                    return Integer.parseInt(from);
                }}))));
Run Code Online (Sandbox Code Playgroud)

  • 使用GC/Guava的其他想法:您可以创建一个Ordering.natural().onResultOf(yourFunction),并使用它:ordering.sortedCopy(Splitter.on(',').split(input)). (2认同)

pol*_*nts 6

String s = "13,5,8,4,2,1,9";
String[] arr = s.split(",");
Arrays.sort(arr, new Comparator<String>() {
   @Override public int compare(String s1, String s2) {
      return Integer.parseInt(s1) - Integer.parseInt(s2);
   }
});
s = Arrays.toString(arr).replaceAll("[\\[ \\]]", "");
Run Code Online (Sandbox Code Playgroud)

此解决方案使用: