【问题标题】:common java-function to create Maps from strings用于从字符串创建映射的通用 java 函数
【发布时间】:2011-04-30 07:24:07
【问题描述】:

是否有任何通用函数(在 apache commons 或类似函数中)可以从类似查询参数的字符串中生成映射?

具体来说:

变体a(查询字符串)

s="a=1&b=3"   
=> Utils.mapFunction(s, '&', '=') 
=>  (Hash)Map { a:1; b:3 }

变体 b (Cachecontrol-Header)

s="max-age=3600;must-revalidate"
=> Utils.mapFunction(s, ';', '=') 
=>  (Hash)Map { max-age:3600; must-revalidate:true }

我不想重新发明轮子。

谢谢

【问题讨论】:

    标签: java string map


    【解决方案1】:

    似乎 HashMap 的一个简单扩展就可以做到:

    /**
     * Simple demo of extending a HashMap
     */
    public class TokenizedStringHashMap extends HashMap<String, String> {
    
      void putAll(String tokenizedString, String delimiter) {
        String[] nameValues = tokenizedString.split(delimiter);
        for (String nameValue : nameValues) {
          String[] pair = nameValue.split("=");
          if (pair.length == 1) {
            // Duplicate the key name if there is only one value
            put(pair[0], pair[0]);
          } else {
            put(pair[0], pair[1]);
          }
        }
      }
    
      public static void main(String[] args) {
        TokenizedStringHashMap example = new TokenizedStringHashMap();
    
        example.putAll("a=1&b=3", "&");
        System.out.println(example.toString());
        example.clear();
    
        example.putAll("max-age=3600;must-revalidate", ";");
        System.out.println(example.toString());
    
      }
    }
    

    【讨论】:

      【解决方案2】:

      stringtomap

      试一试或浏览源代码,看看它是如何实现的。

      【讨论】:

        【解决方案3】:

        我认为不存在这样的库,但是如果您想用很少的代码重新实现它,可以使用“面向 lambda 的库”,例如 GuavaLambdaJ

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-24
          • 1970-01-01
          • 2011-02-14
          • 1970-01-01
          相关资源
          最近更新 更多