2011-03-01 29 views

Respuesta

23

me gustaría utilizar dividida

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

de edición proporciona espacios acolchadas y un valor con un = o ningún valor. p.ej.

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

+1. En proceso de escribir un código idéntico. Depende en parte de la cantidad de error que se necesita para verificar el código. Es este código de juguete? ¿Esto necesita copiar con entrada mal formada, etc.? El código aquí le dará a arrayIndexException si no hay '=' por ejemplo, pero eso puede estar bien en el escenario. –

+0

Manejará un '=' en el valor en lugar de cortarlo;) –

+0

@Tom, Gracias, agregó un poco de manejo de errores. –

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

dividir la cadena (ya sea usando un StringTokenizer o String.split()) en '&'. En cada token solo se divide nuevamente en '='. Use la primera parte como la clave y la segunda parte como el valor.

También se puede hacer uso de una expresión regular, pero el problema es lo suficientemente simple para StringTokenizer.

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; 
    } 
} 
4

sólo tiene que utilizar la guayaba Splitter

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