web-dev-qa-db-fra.com

Comment convertir String en Hashmap en java

Comment convertir une chaîne en hash

String value = "{first_name = naresh,last_name = kumar,gender = male}"

dans 

Map<Object,Object> = {
                      first_name = naresh,
                      last_name = kumar,
                      gender = male
                      }

où les clés sont first_name,last_name,gender et les valeurs sont naresh,kumar,male

Remarque: les touches peuvent être des éléments tels que city = hyderabad

Toute approche générique sera grandement appréciée.

14
Naresh kumar

Ceci est une solution. Si vous voulez le rendre plus générique, vous pouvez nous utiliser la bibliothèque 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
}

Par exemple, vous pouvez changer 

 value = value.substring(1, value.length()-1);

à 

 value = StringUtils.substringBetween(value, "{", "}");

si vous utilisez StringUtils qui est contenu dans le package Apache.commons.lang.

36
kai
String value = "{first_name = naresh,last_name = kumar,gender = male}"

Commençons 

  1. Supprimez { et } de la String >> prenom = naresh, prenom = kumar, genre = homme
  2. Fractionner la String de , >> tableau de 3 éléments
  3. Maintenant vous avez un élément array with 3
  4. Itérer la array et scinder chaque élément par =
  5. Créez un Map<String,String> et mettez chaque partie séparée par =. première partie en tant que Key et deuxième partie en tant que 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())));
}
0
Hiren