#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("\\|"); Mapmap = 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);
Комментариев нет:
Отправить комментарий