Java 数字字符串集合排序(groovy 可能不合适)

Java 数字字符串集合排序(groovy 可能不合适)

/**
   * 排序工具类(Java工具类,groovy不能保证可以适用)
   * @param list       目标集合,{startIndex}-{endIndex},每个元素该下标范围内必须是正确的数字不能是 0122
   * @param startIndex 6  subString.startIndex
   * @param endIndex  13  subString.endIndex
   * @return list.sort(Comparator.comparingInt(a -> ((int) a)));
   */
  public static List<String> sortStrList(List<String> list, Integer startIndex, Integer endIndex) {
      String aindex = list.get(0);
      int len = aindex.length();
      if (len < endIndex || len < startIndex) {
          throw new RuntimeException("集合排序List<String>,请检查元素长度:" + len + "," + startIndex + "," + endIndex);
      }
      list.sort(Comparator.comparing(b -> Integer.parseInt(b.substring(startIndex, endIndex))));
      return list;
  }

测试

public String test3() {

        String str = "0650201123456-489,0650201123987,0650201123110-128";
        String str2 = "0650201123456,0650201123457,0650201123458," +
                "0650201123485,0650201123486,0650201123487,0650201123488,0650201123489," +
                "0650201123460,0650201123461," +
                "0650201123480,0650201123481,0650201123482,0650201123483,0650201123484," +
                "0650201123470," +
                "0650201123490,0650201123491,0650201123492,0650201123493,0650201123494";

        List<Integer> ins = new ArrayList<>();
        ins.add(12);
        ins.add(17);
        ins.add(13);
        ins.add(10);
        ins.add(110);
        ins.add(19);
        ins.add(120);

        String[] strs = str.split(",");
        List<String> strsList = Arrays.asList(strs);

        //lambda表达式实现List接口sort方法排序
        //ins.sort(Comparator.comparingInt(Integer::valueOf));
        //ins.sort((a, b) -> a - b);  //使用Collections类的方法排序
        //ins.sort(Comparator.comparingInt(a -> a));  //使用Collections类的方法排序

        log.info("ins1:" + ins);
        ins.sort(Comparator.comparingInt(a -> a));
        log.info("ins2:" + ins);
        log.info("strsList:" + strsList);
        TestUtils.sortStrList(strsList, 6, 12);
        log.info("strsList:" + strsList);

        return "duang~~";
    }

输出:

ins1:[12, 17, 13, 10, 110, 19, 120]
ins2:[10, 12, 13, 17, 19, 110, 120]
strsList:[0650201123456, 0650201123457, 0650201123458, 0650201123485, 0650201123486, 0650201123487, 0650201123488, 0650201123489, 0650201123460, 0650201123461, 0650201123480, 0650201123481, 0650201123482, 0650201123483, 0650201123484, 0650201123470, 0650201123490, 0650201123491, 0650201123492, 0650201123493, 0650201123494]
strsList:[0650201123456, 0650201123457, 0650201123458, 0650201123460, 0650201123461, 0650201123470, 0650201123485, 0650201123486, 0650201123487, 0650201123488, 0650201123489, 0650201123480, 0650201123481, 0650201123482, 0650201123483, 0650201123484, 0650201123490, 0650201123491, 0650201123492, 0650201123493, 0650201123494]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中可以使用Collections.sort()或Arrays.sort()方法对数组或集合进行排序。如果要对字母数字混合的字符串进行排序,可以先将字符串转换为字符数组,再使用Arrays.sort()方法对字符数组进行排序排序时可以使用Java的中文字符比较器进行字符串排序。具体步骤如下: 1. 定义一个字符串数组用于存放要排序字符串。 2. 使用Arrays类的sort方法对字符串数组进行排序。在排序时,可以通过传递一个Comparator对象作为第二个参数来指定排序方式。 3. 创建一个实现Comparator接口的自定义比较器类。在比较器中重写compare方法,实现对字符串的比较排序。在比较器中,可以使用Java内置的Collator类进行中文字符的排序。 4. 在compare方法中根据字符串首字母的ASCII码值进行升序排序。如果首字母相同,则比较第二个字符,以此类推。 5. 最后,使用Arrays.sort()方法进行排序,并输出排序后的结果。 举个例子,如果要对以下字符串进行排序: String[] strs = {"abc", "123", "中文", "bcd", "001"}; 我们可以使用以下代码进行排序: Arrays.sort(strs, new Comparator<String>() { @Override public int compare(String o1, String o2) { Collator collator = Collator.getInstance(Locale.CHINA); int result = collator.compare(o1, o2); if (result != 0) { return result; } char[] chars1 = o1.toCharArray(); char[] chars2 = o2.toCharArray(); int i = 0; while (i < chars1.length && i < chars2.length) { if (chars1[i] != chars2[i]) { return chars1[i] - chars2[i]; } i++; } return chars1.length - chars2.length; } }); 排序后的结果为: 001, 123, abc, bcd, 中文 以上就是Java字母数字混合字符串排序的方法,希望可以帮到您。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值