如何将字符串解析为map

use*_*949 9 java

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

Pet*_*rey 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]);
}
Run Code Online (Sandbox Code Playgroud)

EDIT允许填充空格和具有=或没有值的值.例如

A = minus- & C=equals= & E==F
Run Code Online (Sandbox Code Playgroud)

  • +1.在编写相同代码的过程中.部分取决于检查代码需要执行多少错误.这个玩具代码?这是否需要使用格式错误的输入复制等?如果例如没有'=',这里的代码将给出arrayIndexException,但在场景中可能没问题. (2认同)

Gek*_*ker 7

只需使用番石榴分离器

\n\n
String src="A=B&C=D&E=F";\nMap map= Splitter.on(\'&\').withKeyValueSeparator(\'=\').split(src)\xef\xbc\x9b\n
Run Code Online (Sandbox Code Playgroud)\n


Pau*_*zie 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;
    }
}
Run Code Online (Sandbox Code Playgroud)