微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Groovy中用字母和数字排序的数字字符串

简单的问题,不知道它是否得到一个简单的答案.
有没有办法对包含字母和数字的字符串列表进行排序,但也要考虑数字?

例如,我的列表包含:

(1) ["Group 1","Group2","Group3","Group10","Group20","Group30"]

(字符串不一定有“group”这个词,也可能有其他单词)

如果我对它进行排序,它会显示

(2)
Group 1
Group 10
Group 2
Group 20
Group 3
Group 30

有没有办法像(1)那样排序?

谢谢

解决方法

试试这个:

def test=["Group 1","2","Group30","1","Grape 1","Grape 12","Grape 2","Grape 22"]

test.sort{ a,b ->
    def n1 = (a =~ /\d+/)[-1] as Integer
    def n2 = (b =~ /\d+/)[-1] as Integer

    def s1 = a.replaceAll(/\d+$/,'').trim()
    def s2 = b.replaceAll(/\d+$/,'').trim()

    if (s1 == s2){
        return n1 <=> n2
    }
    else{
        return s1 <=> s2
    }
}

println test

如果您想首先比较您需要更改内部的数字if:

if (n1 == n2){
    return s1 <=> s2
}
else{
    return n1 <=> n2
}

这是它在字符串中找到的最后一个数字,所以你可以写出你想要的,但’index’应该是最后一个数字

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐