Java 如何将字符串解码为相应的映射?

Java 如何将字符串解码为相应的映射?,java,Java,我是Java新手。我有一个问题,我需要实现decode(String)方法,该方法将字符串解码为相应的Map。在作业中,要求如下: 允许使用空键和值,但必须存在等号(例如“=value”、“key=”) 如果键或值为空,则应返回空字符串 如果给定字符串为空,则应返回空映射 如果给定的字符串为null,则应返回null 示例输入:1=1和2=2 应返回包含{“一”:“1”、“二”:“2”}的映射 Map Map=newhashmap(); 地图放置(“一”、“一”); 地图放置(“二”、“二”);

我是Java新手。我有一个问题,我需要实现
decode(String)
方法,该方法将字符串解码为相应的
Map
。在作业中,要求如下:

  • 允许使用空键和值,但必须存在等号(例如“=value”、“key=”)
  • 如果键或值为空,则应返回空字符串
  • 如果给定字符串为空,则应返回空映射
  • 如果给定的字符串为null,则应返回null
  • 示例输入: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) + "\"");
    }