Best way to code this, string to map conversion in Groovy

后端 未结 8 1875
情深已故
情深已故 2020-12-31 07:22

I have a string like

def data = \"session=234567893egshdjchasd&userId=12345673456&timeOut=1800000\"

I want to convert it to a map

相关标签:
8条回答
  • 2020-12-31 08:10

    If you're looking for efficient, regular expressions are where it's at:

    def data = "session=234567893egshdjchasd&userId=12345673456&timeOut=1800000"
    def map = [:]
    data.findAll(/([^&=]+)=([^&]+)/) { full, name, value ->  map[name] = value }
    
    println map
    

    prints:

    [session:234567893egshdjchasd, userId:12345673456, timeOut:1800000]
    

    If you're not familiar with regular expressions, it might look a little foreign, but it's really not that complicate. It just has two (groups), the first group is any character but a "&" or a "=". The second group is any character besides a "=". The capture groups are on either side of a "=".

    0 讨论(0)
  • 2020-12-31 08:11

    I don't know think this is would run any faster, but it does suggest itself in terms of syntactic parsimony:

    def data = 'session=234567893egshdjchasd&userId=12345673456&timeOut=1800000'
    def result = data.split('&').inject([:]) { map, token -> 
        //Split at "=" and return map with trimmed values
        token.split('=').with { 
            map[it[0].trim()] = it[1].trim() 
        }
        map 
    }
    

    Personally, I like Don's answer for readability and maintainability, but depending on context, this may be appropriate.

    Edit: This is actually a reformatted one-liner.

    0 讨论(0)
提交回复
热议问题