Используя потоки Java 8, вы можете сделать это как один слой.
String resp = "USER: 0xbb492894B403BF08e9181e42B07f76814b10FEdc\n" +
"IP: 10.0.2.6\n" +
"NETMASK: 255.255.0.0\n" +
"SUPERNODE: tlcsupernode.ddns.net\n" +
"PORT: 5000\n" +
"COMMUNITY: tlcnet\n" +
"PSK: mysecret\n" +
"MAC: 00:02:ff:00:02:06";
Map<String, String> map = Arrays.asList(resp.split("\\R")).stream().map(x -> x.split(":", 2)).collect(Collectors.toMap(x -> x[0], x -> x[1].trim()));
for (Map.Entry<String, String> entry : map.entrySet()) {
System.out.println(String.format("Key: %s, Value: %s", entry.getKey(), entry.getValue()));
}
Печать
Key: SUPERNODE, Value: tlcsupernode.ddns.net
Key: NETMASK, Value: 255.255.0.0
Key: COMMUNITY, Value: tlcnet
Key: PORT, Value: 5000
Key: IP, Value: 10.0.2.6
Key: PSK, Value: mysecret
Key: USER, Value: 0xbb492894B403BF08e9181e42B07f76814b10FEdc
Key: MAC, Value: 00:02:ff:00:02:06
Здесь \\R
(соответствует любому типу новой строки) разделяет вашу строку ответа с новой строкой, которая затем разбивается, используя :
со вторым параметром как 2, чтобы разделить строку, чтобы получить максимум два значения, и, наконец, получить как Map
с использованием Collectors.toMap
Изменить:
Для более старой версии Java вы можете использовать простой цикл for,
String resp = "USER: 0xbb492894B403BF08e9181e42B07f76814b10FEdc\n" + "IP: 10.0.2.6\n" + "NETMASK: 255.255.0.0\n"
+ "SUPERNODE: tlcsupernode.ddns.net\n" + "PORT: 5000\n" + "COMMUNITY: tlcnet\n" + "PSK: mysecret\n"
+ "MAC: 00:02:ff:00:02:06";
Map<String, String> map = new HashMap<>();
for (String line : resp.split("\\R")) {
String[] keyValue = line.split(":", 2);
map.put(keyValue[0], keyValue[1]);
}
for (Map.Entry<String, String> entry : map.entrySet()) {
System.out.println(String.format("Key: %s, Value: %s", entry.getKey(), entry.getValue()));
}