Java-如何在不扩展比较器的情况下对包含句点/点的字符串数组进行排序?

2024-01-05

这里是Java菜鸟。我想对包含句点/点的字符串数组进行从小到大的排序。

所以一个数组包含:

1.0.3
1.0.12
1.0.2

排序错误如下:

1.0.12
1.0.2
1.0.3

排序时正确地应该:

1.0.2
1.0.3
1.0.12

这是我到目前为止的代码,但它的排序不正确。

public static String[] sort(String[] l) {
        String[] ll=new String[l.length];
        for(int i=0;i<l.length;i++)
        {

        }

        for (int i = 0; i < l.length - 1; ++i) {
            int minIndex = i;
            for (int j = i + 1; j < l.length; ++j) {

                if (l[j].compareTo(l[minIndex]) < 0) {
                    minIndex = j;
                }
            }

            String temp = l[i];
            l[i] = l[minIndex];
            l[minIndex] = temp;


        }
        return l;


    }

EDIT完整的、可运行的版本。

使用类,可能会更简单:

public class Version implements Comparable<Version> {

   public final int     major;
   public final Integer minor;
   public final Integer patch;

   public Version( String ver ) {
      final String[] parts = ver.split("\\.");
      this.major = Integer.parseInt( parts[0] );
      if( parts.length > 1 ) {
         this.minor = Integer.parseInt( parts[1] );
         if( parts.length > 2 ) {
            this.patch = Integer.parseInt( parts[2] );
         }
         else {
            this.patch = null;
         }
      }
      else {
         this.minor = null;
         this.patch = null;
      }
   }

   @Override
   public int compareTo( Version right ) {
      int diff = this.major - right.major;
      if( diff != 0 ) {
         return diff;
      }
      if( this.minor == null && right.minor == null ) {
         return 0;
      }
      if( this.minor == null && right.minor != null ) {
         return -1;
      }
      if( this.minor != null && right.minor == null ) {
         return +1;
      }
      diff = this.minor - right.minor;
      if( diff != 0 ) {
         return diff;
      }
      if( this.patch == null && right.patch == null ) {
         return 0;
      }
      if( this.patch == null && right.patch != null ) {
         return -1;
      }
      if( this.patch != null && right.patch == null ) {
         return +1;
      }
      diff = this.patch - right.patch;
      return diff;
   }

   @Override
   public String toString() {
      return String.format( "%d.%d.%d", major, minor, patch );
   }

   public static void main( String[] args ) {
      final List<Version> versions = new ArrayList<>( 20 );
      versions.add( new Version( "5.3" ));
      versions.add( new Version( "5.3.0" ));
      versions.add( new Version( "2.5" ));
      versions.add( new Version( "2.5.100" ));
      final Random r = new Random( System.currentTimeMillis());
      for( int i = 0; i < 20; ++i ) {
         final int maj = r.nextInt(  10 );
         final int min = r.nextInt(  10 );
         final int pat = r.nextInt( 100 );
         final Version v =
            new Version( String.format( "%d.%d.%d", maj, min, pat ));
         versions.add( v );
      }
      Collections.sort( versions );
      versions.forEach( System.err::println );
   }
}

执行轨迹:

0.5.55
0.9.54
1.1.60
1.7.19
1.8.15
2.2.85
2.5.null
2.5.100
2.7.68
2.8.42
3.1.57
3.2.50
4.4.18
5.3.null
5.3.0
6.3.0
7.1.26
7.2.30
7.4.47
7.5.63
7.6.13
8.6.12
8.9.80
9.8.4
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java-如何在不扩展比较器的情况下对包含句点/点的字符串数组进行排序? 的相关文章

  • EL 通过 Scriptlet

    在 JSP 中使用 EL 相对于 scriptlet 的优势是什么 EL 被认为是无脚本语言 EL 使 JSP 免受容易出错原始 Java 代码并强制您根据 MVC 思想编写 JSP EL 或像 JSTL 这样的标签库 不可能实现的任何事情
  • 全静态方法和应用单例模式有什么区别?

    我正在创建一个数据库来存储有关我的网站用户的信息 我正在使用 stuts2 因此使用 Java EE 技术 对于数据库 我将创建一个 DBManager 我应该在这里应用单例模式还是将其所有方法设为静态 我将使用这个 DBManager 进
  • 如何在 Java 中使用 StringUtils?

    我是 Java 初学者 我想用StringUtils replace但 Eclipse 输出 StringUtils cannot be resolved I tried import java lang 但它不起作用 java lang不
  • 我需要一个字数统计程序[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我需要弄清
  • 按文件名过滤 eclipse 中的警告

    我们使用 Eclipse 进行 Java 开发 并使用 Maven 将 JSP 编译成 servlet 以便在嵌入式 Jetty 实例中使用 这意味着要从 Eclipse 运行该项目 我必须包含 target jsp source 作为源文
  • spring mvc 跟踪引用页面

    在基于注释的弹簧控制器中 如果用户正在url com first page并点击一个链接或提交一份表格指出url com second page 如何制作second page知道url of first page所以这样second pa
  • 为什么我要使用责任链而不是 switch 语句

    考虑一下您已经获得了多次验证 仅当要检查的对象属于某种类型时 这些验证才应生效 为什么我要使用责任链而不是 switch 语句 责任链示例 public class Executor Inject private ValidatorFact
  • 在 Java 中创建带注释的对象时收到通知

    Intent 我有一个自定义 Java 注释 DynamicField public class RESTEndpointInvoker DynamicField key httpTimeout private long httpTimeo
  • 反应式 Spring Webflux REST 控制器内部重定向

    我正在为 spring 反应项目创建简单的控制器服务器 在设置重定向到另一个位置时 我在调用时发现错误http localhost 8080 There was an unexpected error type Internal Serve
  • 如何在 C# 中定义文本框数组?

    您好 当我在 Windows 申请表上创建文本框时 我无法将其命名为 box 0 box 1 等 我这样做的目的是因为我想循环使用它们 其实我发现TextBox array firstTextBox secondTextBox 也有效
  • 使用 JNI 从 Java 代码中检索 String 值的内存泄漏

    我使用 GetStringUTFChars 从使用 JNI 的 java 代码中检索字符串的值 并使用 ReleaseStringUTFChars 释放该字符串 当代码在 JRE 1 4 上运行时 不会出现内存泄漏 但如果相同的代码在 JR
  • bufferedinputstream 中标记读取限制有什么用

    我是Java流的新手 我想读取特定的文件内容 然后需要从头开始读取 我创建了一个 BufferedInputStream 但我对 BufferedInputStream mark int markLimit 的文档感到困惑 文档说 publ
  • Java字符串查找和替换的最佳方法?

    我正在寻找 Java 中字符串查找和替换的最佳方法 这是一句话 我的名字叫米兰 人们都知道我叫米兰瓦西奇 我想用 Milan Vasic 替换 Milan 弦 但在我已经有 Milan Vasic 的地方 情况不应该是这样 搜索 替换后的结
  • 如何在Java中模拟引用传递?

    我是一个十足的 Java 菜鸟 我知道 Java 将所有参数视为按值传递 并且还有其他几个线程人们对此进行了解释 例如 在 C 中我可以这样做 void makeAThree int n n 3 int main int myInt 4 m
  • ASTParser:解析绑定后查找声明节点

    我创建了一个启用了绑定的 AST 当我稍后解析绑定时 我得到了一个有效的 ITypeBinding 但是 当我想要获取绑定的声明 Node 时 它 总是返回 null 除非 ITypeBinding 在 sourceFile 中声明 这是我
  • 如何使 JScrollPane 与嵌套 JPanel 一起正常工作?

    我正在使用 NetBeans 在 Java 中构建 Swing 应用程序 但我遇到布局问题 我的主框架包含一个JScrollPane其中包含一个JPanel called contentPanel其中又包含一个JPanel called l
  • Struts2中的变量声明

    Struts2中如何声明变量并为该变量赋值 使用设置标签
  • Retrofit 2.0:预期为 BEGIN_OBJECT,但在第 1 行第 1 列路径 $ [重复] 处为 STRING

    这个问题在这里已经有答案了 我在邮递员上传递了更新用户请求并获得了成功的响应 参见图片 现在当我尝试使用 Retrofit 2 在我的应用程序中执行相同操作时 出现错误 com google gson JsonSyntaxException
  • 使用 PDFBox 在 Android 中创建 PDF

    我正在尝试通过我的 Android 应用程序创建 PDFPDFBoxapi 但出现以下错误 java lang NoClassDefFoundError org apache pdfbox pdmodel PDDocument 我已经将以下
  • Java 可变 BigInteger 类

    我正在使用 BigIntegers 进行计算 该计算使用一个调用 multiply 大约 1000 亿次的循环 并且从 BigInteger 创建新对象使其非常慢 我希望有人编写或找到了 MutableBigInteger 类 我在 jav

随机推荐

  • 如何设置 TextInputLayout 上计数器的颜色?

    我正在使用包裹在 EditText 周围的 TextInputLayout 现在柜台是黑色的 我希望它是白色的 我不确定要设置什么选项才能使其变为白色
  • Swift UITabBarController 用动画隐藏

    我试图在隐藏时向我的 tabBarController 添加动画 我能够用以下方法实现这种效果navigationBarController通过使用self navigationController isNavigationBarHidde
  • 想要一个实现“@include”的 AWK

    在 gawk 手册中我描述了一个 include操作员 这使您可以制作 awk 模块并共享脚本等 包含文件 到目前为止 我发现 Windows 的最新 cgywin mingw 和 gnu awk s awk gawk mawk nawk
  • 如何在Flutter中制作ArcProgress Bar?

    我正在尝试在 Flutter 中制作弧形进度条 下图是我想要实现的目标 我只能找到CircularProgressIndicator在 flutter 的 widget 目录中 我厌倦了以下包https pub dartlang org p
  • 部署中的密钥保管库值和链接的模板参数

    我有一个模板来创建密钥保管库和其中的秘密 我还有一个 Service Fabric 模板 它需要密钥保管库中的 3 个内容 保管库 URI 证书 URL 和证书指纹 如果我使用 powershell 创建密钥保管库和密钥 则可以轻松地从输出
  • navigator.mediaDevices 在 Chrome 62 的 iOS 上为 null?

    从最新版本的 Chrome 62 开始 仅在 iOS 11 设备下 当我尝试使用navigator mediaDevices 它是空的 文档中没有任何内容表明此功能已被删除 在此期间我开了一个Chrome 下的错误 https bugs c
  • 按特定字母对 JS 字符串数组进行排序

    我必须像这样对字符串数组进行排序 var arr akaw waka kawa akwa 排序类型必须是特定字母 在本例中为 W 因此我的函数必须返回此数组 arr waka kawa akwa akaw 这是一个动态数组 我不知道数组中有
  • 错误:任务“:app:processDebugAndroidTestManifest”执行失败

    这就是我更新 buildToolsVersion 时发生的情况26 0 1 to 26 0 2 错误 任务 all processDebugAndroidTestManifest 执行失败 清单合并失败 属性元数据 android supp
  • Android 应用程序中的所有图像都被视为图标吗?

    这已经困扰我一段时间了 我可能反应过度了 如果是的话请告诉我 但是 我觉得向 Android Studio 项目添加图像资源比应有的困难 不一定说这很难做到 但我觉得这应该是最容易做的事情之一 我对 AS 有点陌生 所以我在这里可能有点不合
  • 如何检测iPhone上的左/右滑动?

    有没有简单的方法来检测 iPhone 的此类手势 我可以使用touchesBegan touchesMoved touchesEnded 但我该如何实现这些手势呢 thz u 您将使用 UISwipeGestureRecognizer 对象
  • 绕着正方形滚动一个圆

    近一个月后 我仍然停留在这个问题上 我设法决定圆圈 或我所说的行人 是否应该向左 向右或向上 向下移动 但我需要有可能移动行人around一座建筑物 这意味着他们必须转角 基本上无论方向如何 他们只需要转90度 非常感谢 import nu
  • Python 中单下划线“_”变量的用途是什么?

    是什么意思 after for在这段代码中 if tbh bag n 0 for in tbh bag atom set n 1 Python 中有 3 个主要的常规用途 保存交互式中最后执行的表达式的结果 口译会议 参见docs http
  • 防止 iOS safari 移动网页窗口,以便发生拖动事件

    我使用 Pep js 进行多点触控上的动态拖动 但我的拖动事件没有被注册 因为当我尝试在 Safari 中拖动对象时 在 iOS 窗口中 窗口本身会移动并跟随我的拖动 如何防止浏览器窗口跟随我的拖动 以便 div 在我的网页中可以拖动吗 这
  • SPRING REST:请求被拒绝,因为未找到多部分边界

    我为 Spring 3 Rest 多部分文件上传做了一个 POC 它工作正常 但是当我尝试与我的应用程序集成时 我遇到了问题 它抛出以下异常 org springframework web multipart MultipartExcept
  • 是否可以创建没有锁的线程安全集合?

    这纯粹是出于兴趣问题 欢迎任何类型的问题 那么是否可以创建没有任何锁的线程安全集合呢 我所说的锁是指任何线程同步机制 包括互斥锁 信号量 甚至互锁 所有这些 是否可以在用户级别而不调用系统函数 好吧 可能实施效果不佳 我对理论上的可能性感兴
  • 如何更改可序列化 python 对象的 json 编码行为?

    更改不可 JSON 序列化的对象的格式很容易 例如 datetime datetime 出于调试目的 我的要求是改变一些自定义对象从基本对象扩展的方式 例如dict and list 以json格式序列化 代码 import datetim
  • PHP-REGEX - 多项选择类型

    我有一个像这样的字符串 str 1 What is love a Haddaway b Haxxaway c Hassaway d Hannaway 2 What is love a Haddaway b Haxxaway c Hassaw
  • 用户名密码验证器和证书

    我有一个使用 net tcp 绑定和自定义 UserNamePasswordValidator 的 Web 服务 用户名和密码由客户端在 Credentials UserName UserName 和 Credentials UserNam
  • 这个 DB2 游标是循环吗?

    无论是命运还是运气 我正在致力于将 DB2 存储过程转换为 SQL Server 存储过程 One thing I could not completely understand in DB2 is cursors1 By looking
  • Java-如何在不扩展比较器的情况下对包含句点/点的字符串数组进行排序?

    这里是Java菜鸟 我想对包含句点 点的字符串数组进行从小到大的排序 所以一个数组包含 1 0 3 1 0 12 1 0 2 排序错误如下 1 0 12 1 0 2 1 0 3 排序时正确地应该 1 0 2 1 0 3 1 0 12 这是我