Parsing and Updating Nested HashMaps in Java

Introduction

Hello, and welcome back! Are you ready for a new challenge? In this unit, we're stepping up a notch to tackle a complex yet intriguing task. It involves parsing complex strings into Java HashMaps and then updating them, which is a common requirement in many real-world tasks. So yes, this unit's session is going to be pretty pragmatic — just the way you like it!

Task Statement

This task involves transforming a given string into a nested HashMap and updating a specific key-value pair within that map. The input string will take the form "Key1=Value1,Key2=Value2,...". When a part of the value is another key-value string, we create a nested HashMap.

For example, the string "A1=B1,C1={D1=E1,F1=G1},I1=J1" should be transformed into the following nested HashMap:

Java
HashMap<String, HashMap<String, String>> dictionary = new HashMap<String, HashMap<String, String>>() {{
    put("A1", new HashMap<String, String>() {{
        put("", "B1");
    }});
    put("C1", new HashMap<String, String>() {{
        put("D1", "E1");
        put("F1", "G1");
    }});
    put("I1", new HashMap<String, String>() {{
        put("", "J1");
    }});
}};

Your Java function should parse this string into the above HashMap, then update the value of the nested key F1 from G1 to some other value, say NewValue. The function should ultimately return the updated HashMap.

Step 1 - Setting Up the Function and Variables

First, set up the function and necessary variables:

Java
import java.util.HashMap;

public class Solution {
    
    public static HashMap<String, HashMap<String, String>> parseString(String inputString) {
        HashMap<String, HashMap<String, String>> result = new HashMap<>();

        String key = ""; // to store the outer map key
        HashMap<String, String> innerMap = new HashMap<>(); // to store the inner map
        boolean inInnerMap = false; // flag to check if we are inside an inner map
        int i = 0; // to iterate through the string

Step 2 - Handling the Opening and Closing Braces

Next, handle the opening and closing braces. If an inner map is encountered, set the flag and prepare to parse it:

Java
        while (i < inputString.length()) {
            if (inputString.charAt(i) == '{') {
                // Entering an inner map
                inInnerMap = true;
                i++; // Skip the '{'
            } else if (inputString.charAt(i) == '}') {
                // Exiting an inner map
                result.put(key, innerMap);
                innerMap = new HashMap<>();
                inInnerMap = false;
                i++; // Skip the '}'
                if (i < inputString.length() && inputString.charAt(i) == ',') {
                    i++; // Skip the ',' after '}'
                }
            }
Sign up

Join the 1M+ learners on CodeSignal

Be a part of our community of 1M+ users who develop and demonstrate their skills on CodeSignal