Как преобразовать строку в Hashmap в java
как преобразовать строку в хэш-карту
String value = "{first_name = naresh,last_name = kumar,gender = male}"
на
Map<Object,Object> = {
first_name = naresh,
last_name = kumar,
gender = male
}
были ключи first_name,last_name,gender
и значения naresh,kumar,male
Примечание : ключи могут быть любые вещи, как city = hyderabad
общий подход будет высоко оценен.
3 ответов
это одно из решений. Если вы хотите сделать его более общим, вы можете нам StringUtils
библиотека.
String value = "{first_name = naresh,last_name = kumar,gender = male}";
value = value.substring(1, value.length()-1); //remove curly brackets
String[] keyValuePairs = value.split(","); //split the string to creat key-value pairs
Map<String,String> map = new HashMap<>();
for(String pair : keyValuePairs) //iterate over the pairs
{
String[] entry = pair.split("="); //split the pairs to get key and value
map.put(entry[0].trim(), entry[1].trim()); //add them to the hashmap and trim whitespaces
}
на
value = value.substring(1, value.length()-1);
to
value = StringUtils.substringBetween(value, "{", "}");
если вы используете StringUtils
содержащийся в apache.commons.lang
пакета.
String value = "{first_name = naresh,last_name = kumar,gender = male}"
давайте
- удалить
{
и}
СString
>>first_name = naresh, last_name = Кумар, пол = мужчина - разделить
String
С,
>> массив из 3 элементов - теперь у вас есть
array
С3
элемент - повторять
array
и разделить каждый элемент=
- создать
Map<String,String>
поместите каждую часть, разделенную=
. первая часть какKey
и вторая часть какValue
@Test
public void testToStringToMap() {
Map<String,String> expected = new HashMap<>();
expected.put("first_name", "naresh");
expected.put("last_name", "kumar");
expected.put("gender", "male");
String mapString = expected.toString();
Map<String, String> actual = Arrays.stream(mapString.replace("{", "").replace("}", "").split(","))
.map(arrayData-> arrayData.split("="))
.collect(Collectors.toMap(d-> ((String)d[0]).trim(), d-> (String)d[1]));
expected.entrySet().stream().forEach(e->assertTrue(actual.get(e.getKey()).equals(e.getValue())));
}