import java.util.HashMap;
import java.util.Map;
public class UrlParameterSplitter {
/**
* Splits URL parameters into a map. Handles backward compatibility by
* providing default values if parameters are missing or null.
*
* @param urlParams A string containing URL parameters (e.g., "param1=value1¶m2=value2").
* @param defaultValues A map containing default values for parameters.
* @return A map containing the URL parameters and their values.
*/
public static Map<String, String> splitUrlParams(String urlParams, Map<String, String> defaultValues) {
Map<String, String> params = new HashMap<>();
if (urlParams == null || urlParams.isEmpty()) {
return defaultValues; // Return default values if no parameters are provided.
}
String[] pairs = urlParams.split("&");
for (String pair : pairs) {
if (pair == null || pair.isEmpty()) {
continue; // Skip empty pairs
}
String[] parts = pair.split("=");
if (parts.length == 2) {
String key = parts[0];
String value = parts[1];
params.put(key, value);
} else if (parts.length == 1) {
//Handle cases like "param_without_value" - use the default value
String key = parts[0];
String defaultValue = defaultValues.getOrDefault(key, ""); // Use default value if key not found
params.put(key, defaultValue);
} else {
//Handle invalid parameter format (more than one '=' sign) - use the default value
String key = pair;
String defaultValue = defaultValues.getOrDefault(key, "");
params.put(key, defaultValue);
}
}
return params;
}
public static void main(String[] args) {
// Example usage
String urlParams = "param1=value1¶m2=value2¶m3";
Map<String, String> defaultValues = new HashMap<>();
defaultValues.put("param1", "default_value_1");
defaultValues.put("param2", "default_value_2");
defaultValues.put("param3", "default_value_3");
Map<String, String> parsedParams = splitUrlParams(urlParams, defaultValues);
System.out.println(parsedParams);
}
}
Add your comment