java中如何对以数字开头的字符串集合进行排序

 zygg213713 发布于 2022-10-25 06:20
  • php
  • 2 个回答
    • 自定义一个Comparator就可以了。

          String[] arr = {"1号","2号","3号","11号","21号","12号","13号","100号"};
          Arrays.sort(arr);
          System.out.println(Arrays.toString(arr));
          List<String> list = Arrays.asList(arr);
          Collections.sort(list,new Comparator<String>() {
              @Override
              public int compare(String o1, String o2) {
                  return Integer.parseInt(o1.replaceAll("[^0-9]*", "")) - Integer.parseInt(o2.replaceAll("[^0-9]*", ""));
              }
          });
          System.out.println(list);
      
      2022-10-26 14:24 回答
    • 楼上说的很对,关键是要取出字符串前面的数字,可能你目前对正则并不熟悉,所以我写个简单的取出字符串前面数字的方法:

      import java.util.*;
      
      public class Main {
      
          // 取出字符串前面的数字
          public static String getStartDigits(String str) {
              int len = str.length();
              int stopPos = 0;
              for (int i = 0; i < len; i++) { // 遍历 str 的字符
                  char ch = str.charAt(i);
                  if (!(ch >= '0' && ch <= '9')) { // 如果当前字符不是数字
                      stopPos = i;
                      break;
                  }
              }
              return str.substring(0, stopPos);
          }
      
          public static void sortByStartDigits(List<String> list) {
              Collections.sort(list, new Comparator<String>() {
                  @Override
                  public int compare(String s1, String s2) {
                      int num1 = Integer.parseInt(getStartDigits(s1));
                      int num2 = Integer.parseInt(getStartDigits(s2));
      
                      return num1 - num2;
                  }
              });
          }
      
          public static void main(String[] args) throws Exception {
              List<String> list = Arrays.asList(
                      "1号摄像机", "10号摄像机", "2号摄像机", "20号摄像机", "30号摄像机", "31号摄像机");
              System.out.println("排序前:");
              System.out.println(list);
              
              sortByStartDigits(list);
              System.out.println("排序后:");
              System.out.println(list);
          }
      
      }

      2022-10-26 14:24 回答
    撰写答案
    今天,你开发时遇到什么问题呢?
    立即提问
    热门标签
    PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有