9
votes

Comment analyser la chaîne dans la carte

avoir une chaîne comme A = B & C = D & E = F, comment l'analyser dans la carte?


0 commentaires

5 Réponses :


28
votes

J'utiliserais Split

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


2 commentaires

+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 = dans la valeur plutôt que de la couper;)



2
votes
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]);
}

0 commentaires

2
votes

Split la chaîne (à l'aide d'un StringTokenizerzerzerzer string.split () ) 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.

Il peut également être fait à l'aide d'une regex, mais le problème est assez simple pour stringtenzerzer .


0 commentaires

5
votes
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;
    }
}

0 commentaires

4
votes

Il suffit d'utiliser GUAVA SPLITTER

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


0 commentaires