Как преобразовать строку в 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}"
давайте
  1. удалить { и } С String>>first_name = naresh, last_name = Кумар, пол = мужчина
  2. разделить String С ,>> массив из 3 элементов
  3. теперь у вас есть array С 3 элемент
  4. повторять array и разделить каждый элемент =
  5. создать 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())));
}