Java 如何将字符串解码为相应的映射?
我是Java新手。我有一个问题,我需要实现Java 如何将字符串解码为相应的映射?,java,Java,我是Java新手。我有一个问题,我需要实现decode(String)方法,该方法将字符串解码为相应的Map。在作业中,要求如下: 允许使用空键和值,但必须存在等号(例如“=value”、“key=”) 如果键或值为空,则应返回空字符串 如果给定字符串为空,则应返回空映射 如果给定的字符串为null,则应返回null 示例输入:1=1和2=2 应返回包含{“一”:“1”、“二”:“2”}的映射 Map Map=newhashmap(); 地图放置(“一”、“一”); 地图放置(“二”、“二”);
decode(String)
方法,该方法将字符串解码为相应的Map
。在作业中,要求如下:
示例输入:1=1和2=2
应返回包含{“一”:“1”、“二”:“2”}的映射
Map Map=newhashmap();
地图放置(“一”、“一”);
地图放置(“二”、“二”);
地图。放置(“,”);
放在地图上(“键”,“键”);
map.put(“,”值“);
Set keys=map.keySet();
用于(字符串键:键){
System.out.print(“\”“+key+”\”“+”:“+”\”“+map.get(key)+“\”);
}
我的一段代码根据需要提供输出,但是我已经用Map
接口在main方法中实现了这一点,同时我需要编写将String
作为参数并解码为Map的代码
谢谢一个解决方案可以是:
public Map<String, String> parseMap(String mapString) {
if (mapString == null || mapString.isEmpty()) {
return Collections.emptyMap();
}
return Arrays.stream(mapString.split("&"))
.map(this::splitParam)
.collect(Collectors.toMap(Map.Entry::getKey,Map.Entry::getValue));
}
public AbstractMap.SimpleEntry<String, String> splitParam(String it) {
final int idx = it.indexOf("=");
final String key = it.substring(0, idx);
final String value = it.substring(idx + 1);
return new AbstractMap.SimpleEntry<>(key, value);
}
公共映射解析映射(字符串映射字符串){
if(mapString==null | | mapString.isEmpty()){
return Collections.emptyMap();
}
返回Arrays.stream(mapString.split(“&”))
.map(this::splitParam)
.collect(Collectors.toMap(Map.Entry::getKey,Map.Entry::getValue));
}
public AbstractMap.SimpleEntry splitParam(字符串){
final int idx=it.indexOf(“=”);
最终字符串键=it.substring(0,idx);
最终字符串值=it.substring(idx+1);
返回新的AbstractMap.SimpleEntry(键,值);
}
用法
String inputString=“一=1和二=2”;
Map Map=parseMap(inputString);
//重新打印地图的代码
Set keys=map.keySet();
用于(字符串键:键){
System.out.print(“\”“+key+”\”“+”:“+”\”“+map.get(key)+“\”);
}
一种解决方案可以是:
public Map<String, String> parseMap(String mapString) {
if (mapString == null || mapString.isEmpty()) {
return Collections.emptyMap();
}
return Arrays.stream(mapString.split("&"))
.map(this::splitParam)
.collect(Collectors.toMap(Map.Entry::getKey,Map.Entry::getValue));
}
public AbstractMap.SimpleEntry<String, String> splitParam(String it) {
final int idx = it.indexOf("=");
final String key = it.substring(0, idx);
final String value = it.substring(idx + 1);
return new AbstractMap.SimpleEntry<>(key, value);
}
公共映射解析映射(字符串映射字符串){
if(mapString==null | | mapString.isEmpty()){
return Collections.emptyMap();
}
返回Arrays.stream(mapString.split(“&”))
.map(this::splitParam)
.collect(Collectors.toMap(Map.Entry::getKey,Map.Entry::getValue));
}
public AbstractMap.SimpleEntry splitParam(字符串){
final int idx=it.indexOf(“=”);
最终字符串键=it.substring(0,idx);
最终字符串值=it.substring(idx+1);
返回新的AbstractMap.SimpleEntry(键,值);
}
用法
String inputString=“一=1和二=2”;
Map Map=parseMap(inputString);
//重新打印地图的代码
Set keys=map.keySet();
用于(字符串键:键){
System.out.print(“\”“+key+”\”“+”:“+”\”“+map.get(key)+“\”);
}
在编辑器中尝试此操作,仅4行:)
String input=“一=1和二=2”;
字符串[]kvs=input.split(&);
Map hashMap=Stream.of(kvs)
.collect(收集器.toMap(项->项.split(“=”)[0],
项目->项目分割(“=”[1]);
forEach((k,v)->System.out.println(k+“:”+v));
在编辑器中尝试此操作,仅4行:)
String input=“一=1和二=2”;
字符串[]kvs=input.split(&);
Map hashMap=Stream.of(kvs)
.collect(收集器.toMap(项->项.split(“=”)[0],
项目->项目分割(“=”[1]);
forEach((k,v)->System.out.println(k+“:”+v));
您是否先尝试过一些东西?使用map.put(“Key”),您到底想实现什么代码>和map.put(“,”值”)代码>?阅读作业要求1和2。这是必需的。@QBrute我不知道从何处开始以及如何编写这段特定的代码,因为我是Java新手。最好的起点是将传递到decode()中的字符串拆分为分隔符,即“string[]lines=string.split(&”)”。然后,您可以对每一行进行验证,以符合您的要求您是否先尝试了一些东西?使用map.put(“Key”),您到底想实现什么代码>和map.put(“,”值”)代码>?阅读作业要求1和2。这是必需的。@QBrute我不知道从何处开始以及如何编写这段特定的代码,因为我是Java新手。最好的起点是将传递到decode()中的字符串拆分为分隔符,即“string[]lines=string.split(&”)”。然后,您可以对每一行进行验证,以符合您的要求。没什么值得注意的parseMap
不是静态方法,因此我们需要创建同一类的实例来调用该方法。除此之外,代码运行良好。谢谢。添加了静态关键字;)。注意:拥有空键是一个奇怪的要求。如果您有多个空键,则该值将被覆盖,并且只有最后一个将包含在地图中。这可能是一个奇怪的要求,但它是来自一家公司的面试问题。我对此无能为力。很高兴您添加了static
关键字,但是当我们使用this::splitQueryParameter
时。它说,这不能从静态上下文中引用
。所以我只是简单地把这个方法变成非静态的,一切都很好。是的,我还恢复了它^^它正在工作。没什么值得注意的parseMap
不是静态方法,因此我们需要创建同一类的实例来调用该方法。除此之外,代码运行良好。谢谢。添加了静态关键字;)。注意:拥有空键是一个奇怪的要求。如果您有多个空键,则该值将被覆盖,并且只有最后一个将包含在地图中。这可能是一个奇怪的要求,但它是来自一家公司的面试问题。我对此无能为力。很高兴您添加了static
关键字,但是当我们使用this::splitQ时
String inputString = "one=1&two=2";
Map<String, String> map = parseMap(inputString);
//your code to print the map again
Set<String> keys = map.keySet();
for(String key : keys) {
System.out.print("\"" + key + "\"" + ":" + "\"" + map.get(key) + "\"");
}