webentwicklung-frage-antwort-db.com.de

Wie konvertiert man String in Java in Hashmap?

Wie kann eine Zeichenfolge in eine Hash-Map umgewandelt werden?

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

in 

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

schlüssel waren first_name,last_name,gender und Werte sind naresh,kumar,male

Hinweis: Schlüssel können wie city = hyderabad sein.

Jeder generische Ansatz wird sehr geschätzt.

14
Naresh kumar

Dies ist eine Lösung. Wenn Sie es allgemeiner machen möchten, können Sie StringUtils library verwenden.

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
}

Zum Beispiel können Sie wechseln 

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

zu 

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

wenn Sie StringUtils verwenden, das im Apache.commons.lang-Paket enthalten ist.

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

Lasst uns beginnen 

  1. Entfernen Sie { und } aus der String >> first_name = naresh, last_name = kumar, gender = male
  2. Trennen Sie das String vom , >> Array mit 3 Elementen
  3. Jetzt haben Sie eine array mit 3 Element
  4. Itere die array und teile jedes Element durch =
  5. Erstellen Sie einen Map<String,String> und setzen Sie jeden Teil durch = getrennt. erster Teil als Key und zweiter Teil als Value 

Da ich Gson recht großzügig verwende, kann ich einen Gson-basierten Ansatz verwenden:

Map<Object,Object> attributes = gson.fromJson(gson.toJson(value)),Map.class);

Was es tut, ist:

  1. gson.toJson(value) serialisiert Ihr Objekt in die entsprechende Json-Darstellung.
  2. gson.fromJson Konvertiert den Json-String in das angegebene Objekt. (in diesem Beispiel - Map)

Die Flexibilität bei diesem Ansatz besteht darin, dass Sie ein Objekt anstelle eines Strings an die Methode toJson übergeben können.

0
tryingToLearn
@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