Страницы

Поиск по вопросам

воскресенье, 29 марта 2020 г.

Парсинг строки в Java в HashMap

#java


Как правильнее распарсить строку.
Строка вот такого типа: key:value|key:value|key:value

В итоге планирую получить HashMap. 
Пример: "Temperature:35"
    


Ответы

Ответ 1



1) split: String example = "Terminator:35|SuperMen:53|Robbin:12"; String[] pairs = example.split("\\|"); Map map = new HashMap<>(); for (String pair : pairs) { String[] keyValue = pair.split(":"); map.put(keyValue[0], Integer.valueOf(keyValue[1])); } 2) regex: Map map = new HashMap<>(); String example = "Terminator:35|SuperMen:53|Robbin:12"; Pattern pattern = Pattern.compile("(\\w+):(\\d+)"); Matcher matcher = pattern.matcher(example); while (matcher.find()) { map.put(matcher.group(1), Integer.valueOf(matcher.group(2))); } System.out.println(map); 3) в цикле, не сильно оптимально вышло, но Map map = new HashMap<>(); String example = "Terminator:35|SuperMen:53|Robbin:12"; StringBuilder key = new StringBuilder(); StringBuilder value = new StringBuilder(); boolean keyFlag = true; boolean valueFlag = false; for (char ch : example.toCharArray()) { if (ch == ':') { valueFlag = true; keyFlag = false; } else if (ch == '|') { keyFlag = true; valueFlag = false; map.put(key.toString(), Integer.valueOf(value.toString())); value = new StringBuilder(); key = new StringBuilder(); } else { if (keyFlag) { key.append(ch); } else if (valueFlag) { value.append(ch); } } } map.put(key.toString(), Integer.valueOf(value.toString())); System.out.println(map);

Комментариев нет:

Отправить комментарий