Groovy: Получить значение с ключом из строкового массива - PullRequest
0 голосов
/ 25 апреля 2020

У меня есть переменная с именем 'output', которая является строковым массивом, который содержит разделенные запятыми пары ключ-значение. Как лучше всего проанализировать его, чтобы получить значение, например, 'arm64-v8a', используя его ключ 'ro.product.cpu.abi'?

       String[] output= androidDetails();
       println("Output is $output")

//prints
//Output is [[ro.product.cpu.abi]: [arm64-v8a], [ro.product.manufacturer]: //[Google], [ro.product.model]: [Pixel 2], [ro.product.name]: [walleye]]

Ответы [ 2 ]

1 голос
/ 25 апреля 2020

Вы можете относительно легко превратить эту строку в карту, а затем выбрать из нее то, что хотите. Например,

def data = '[[ro.product.cpu.abi]: [arm64-v8a], [ro.product.manufacturer]: [Google], [ro.product.model]: [Pixel 2], [ro.product.name]: [walleye]]'

def parsed = (data =~ /\[([a-z\.]+?)\]\s*:\s*\[(.*?)\]/).iterator().collectEntries{ _, k, v -> [k,v] }

assert parsed['ro.product.cpu.abi'] == 'arm64-v8a'
0 голосов
/ 25 апреля 2020

Приведенный ниже код работает для анализа данных, хранящихся в переменной «output» (содержимое вопроса), в карту с правильными значениями ключа.

String outputString = output.toString()
                outputString=outputString.replace("[","")
                outputString=outputString.replace("]","")
                outputString=outputString.replace(" ","")
                outputString="["+outputString+"]"
                println("outputString" + outputString.toString())
                def map =
                        // Take the String value between
                        // the [ and ] brackets.
                        outputString[1..-2]
                        // Split on , to get a List.
                                .split(',')
                        // Each list item is transformed
                        // to a Map entry with key/value.
                                .collectEntries { entry ->
                                    def pair = entry.split(':')
                                    [(pair.first()): pair.last()]
                                }

                println("map.size" +map.size())
                println("map.ro.product.cpu.abi " +map['map.ro.product.cpu.abi]')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...