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.
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.
String value = "{first_name = naresh,last_name = kumar,gender = male}"
Lasst uns beginnen
{
und }
aus der String
>> first_name = naresh, last_name = kumar, gender = maleString
vom ,
>> Array mit 3 Elementenarray
mit 3
Elementarray
und teile jedes Element durch =
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:
gson.toJson(value)
serialisiert Ihr Objekt in die entsprechende Json-Darstellung.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.
@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())));
}