簡體   English   中英

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

[英]Numeric string sorting with letters and numbers in 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", "Group2", "Group3", "2", "Group20", "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'應該是最后一個數字

您可以將字符串拆分為兩個子字符串,然后單獨對它們進行排序。

這應該做的伎倆:

def myList= ["Group 1", "Group2", "Group3", "2", "Group20", "Group30", "1", "Grape 1"]
print (myList.sort { a, b -> a.compareToIgnoreCase b })

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM