avoir une chaîne comme A = B & C = D & E = F, comment l'analyser dans la carte? P>
5 Réponses :
J'utiliserais Split
A = minus- & C=equals= & E==F
+1. En cours d'écriture de code identique. Dépend en partie sur la quantité d'erreur à vérifier le code à faire. Ce code jouet est-il? Cela doit-il copier avec une entrée mal formée, etc.? Le code ici donnera à ArrayIndexException s'il n'y a pas de '=' par exemple, mais cela peut être tout simplement bien dans le scénario.
Il gérera un = code> dans la valeur plutôt que de la couper;)
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]); }
Split la chaîne (à l'aide d'un Il peut également être fait à l'aide d'une regex, mais le problème est assez simple pour StringTokenizerzerzerzer ou
string.split () code>) sur "&". Sur chaque jeton, il suffit de se séparer sur '='. Utilisez la première pièce en tant que clé et deuxième partie comme valeur. P>
stringtenzerzer code>. P>
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; } }
Il suffit d'utiliser GUAVA SPLITTER
String src="A=B&C=D&E=F"; Map map= Splitter.on('&').withKeyValueSeparator('=').split(src)ï¼