比较 groovy 中的版本字符串
嘿,我创建了一个 Groovy 脚本,它将提取某些文件夹的版本号。然后我想比较版本号并选择最高的。
我让我的脚本通过 dir 文件夹运行,然后获取以下格式的版本: 02.2.02.01
所以我可以获得如下内容:
- 02.2.02.01
- 02.2.02.02
- 02.2.03.01
我不' t 将它们作为列表,但像这样:
baseDir.listFiles().each { file ->
def string = file.getName().substring(5, 15)
// do stuff
}
我还测试了 Groovy 可以将它们与 >
运算符进行比较,并且它 能!但现在我需要选择版本最高的那个
Hey I have created a Groovy script that will extract the version numbers of some folder. I would then like to compare the version numbers and select the highest.
I got my script to run through the dir folder and I then get the versions in this format: 02.2.02.01
So I could get something like this:
- 02.2.02.01
- 02.2.02.02
- 02.2.03.01
I don't have them as a list but like this:
baseDir.listFiles().each { file ->
def string = file.getName().substring(5, 15)
// do stuff
}
Also I have tested that Groovy could compare them with the >
operator and it can! But now I need to select the one with the highest version
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(11)
这似乎有效
这是一组不充分的测试。你应该再添加一些。
在 Groovy 控制台中运行此代码和测试以验证其是否有效
This appears to work
Here is an inadequate set of tests. You should add some more.
Run this code and the tests in the Groovy console to verify that it works
如果我们想要最短的答案,这必须接近;-)
If we're going for the shortest answer, this must come close ;-)
我的是最短的!哈哈 )
Mine is the shortest! lol )
如果有人使用 Grails(例如 Grails 2.2.3),我认为 VersionComparator 已经提供了我们所需要的东西。
如果您不使用 Grails,您可以随时 Google 搜索此类的源代码。
工作测试示例:
希望这有帮助。
If anyone is using Grails (e.g. Grails 2.2.3), I think VersionComparator already provides exactly what we need.
If you are not using Grails, you can always Google the source code of this class.
Example of working tests:
Hope this helps.
这是对 Tim 答案的修改,它采用两个版本字符串并返回一个布尔值(如果第一个版本比第二个版本更新,则为 true)
Here is a modification of Tim's answer which takes two version strings and returns a boolean (true if the first is newer than the second)
我与 Jenkins ExtendedChoiceParameter 一起使用的代码(容忍版本字符串中的非整数片段)
The code I am using with Jenkins ExtendedChoiceParameter (tolerant to non-integer fragments in the version string)
这是我的解决方案:
Here my solution:
我在Android Studio 3.0 Beta 7中使用gradle 4.1。有VersionNumber.java(在C:\Users\ssfang.gradle\wrapper\dists\gradle-4.1-all\bzyivzo6n839fup2jbap0tjew\gradle-4.1\src\core\org\gradle下\util)
例如:
--
I use gradle 4.1 in Android Studio 3.0 Beta 7. There is VersionNumber.java (under C:\Users\ssfang.gradle\wrapper\dists\gradle-4.1-all\bzyivzo6n839fup2jbap0tjew\gradle-4.1\src\core\org\gradle\util)
For example:
--
这是 Nikita 贡献的稍微修改的版本:
Here's a slightly modified version of Nikita's contribution:
如果您只需要实现 Comparable 或 Comparator 接口,这是我根据其他答案提出的最短解决方案:
If you just need to implement
Comparable
orComparator
interface here's the shortest solution I came up with based on the other answers: