2013-07-17 2 views
0
def val = "[name: searchBaseDN value: , name: enable value: false, name: userDn value: 
cn=EAGREAD,ou=Users,ou=Administration,o=hyn, name: base value: , name: prefsize value: 1, 
name: timeBetweenEvictionRuns value: 300000]" 

Я хотел бы, чтобы преобразовать его в HashMap вал [имя: значение]Преобразовать Строка Карта

Спасибо за вашу помощь.

+1

является то, что массив или строка? Если это строка, которую указывает код, тогда вам нужно будет разобрать и извлечь эту информацию. – aldrin

ответ

1

Это выглядит многообещающим:

matches = val =~ /name:\s+(.*?)\s+value:\s+(.*?)(,\s+|\s+|])/ 

def newVal = [:] 
matches.each { m -> 
    newVal[m[1]] = m[2] 
} 

Но если строка изменилась незначительно, регулярное выражение может сломаться ...

+0

Вы также можете использовать инъекцию: def newVal = matches.inject ([:]) {m, match -> m << [ (match [1]): match [2]]} ' –

+0

, если val =" [name: urls value: lp: //23.165.3.215: 383, lp: //23.165.3.216: 383, name: searchBaseDN value :], какое изменение мне нужно сделать в шаблоне. В результате показывается только один URL. [urls lp: //23.165.3.215: 383] –

+0

@tim_yates или даже 'def newVal = matches.collect {it [ 1, 2]} .collectEntries() '= D – epidemian

Смежные вопросы