如何将字符串解析为map

时间:2011-03-01 10:30:51

标签: java

有一个像A = B& C = D& E = F的字符串,如何将其解析成地图?

5 个答案:

答案 0 :(得分:27)

我会使用拆分

String text = "A=B&C=D&E=F";
Map<String, String> map = new LinkedHashMap<String, String>();
for(String keyValue : text.split(" *& *")) {
   String[] pairs = keyValue.split(" *= *", 2);
   map.put(pairs[0], pairs.length == 1 ? "" : pairs[1]);
}

EDIT允许填充空格和值为=或没有值的值。 e.g。

A = minus- & C=equals= & E==F

答案 1 :(得分:5)

public class TestMapParser {
    @Test
    public void testParsing() {
        Map<String, String> map = parseMap("A=B&C=D&E=F");
        Assert.assertTrue("contains key", map.containsKey("A"));
        Assert.assertEquals("contains value", "B", map.get("A"));

        Assert.assertTrue("contains key", map.containsKey("C"));
        Assert.assertEquals("contains value", "D", map.get("C"));

        Assert.assertTrue("contains key", map.containsKey("E"));
        Assert.assertEquals("contains value", "F", map.get("E"));
    }

    private Map<String, String> parseMap(final String input) {
        final Map<String, String> map = new HashMap<String, String>();
        for (String pair : input.split("&")) {
            String[] kv = pair.split("=");
            map.put(kv[0], kv[1]);
        }
        return map;
    }
}

答案 2 :(得分:4)

只需使用guava Splitter

String src="A=B&C=D&E=F";
Map map= Splitter.on('&').withKeyValueSeparator('=').split(src);

答案 3 :(得分:2)

在'&amp;'上拆分字符串(使用StringTokenizerString.split())。在每个令牌上再次拆分'='。使用第一部分作为键,第二部分作为值。

也可以使用正则表达式完成,但问题对于StringTokenizer来说非常简单。

答案 4 :(得分:1)

String  t = A=B&C=D&E=F;
Map map = new HashMap();
String[] pairs = t.split("&");
//TODO 1) Learn generis 2) Use gnerics    
for (String pair : pairs)
{
    String[] kv = pair.split("=");
    map.put(kv[0], kv[1]);
}