将字符串转换为Map的常见Java函数

6
有没有通用的函数(在apache commons或类似库中)可以从类似查询参数的字符串中创建映射?
具体来说:
变体a(查询字符串)
s="a=1&b=3"   
=> Utils.mapFunction(s, '&', '=') 
=>  (Hash)Map { a:1; b:3 }

变量b(缓存控制头)

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

我不想重复造轮子。
谢谢。
3个回答

2

stringtomap

你可以试用它或浏览源代码,看看它是如何实现的。


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());

  }
}

1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接