2010-10-25 17 views
6

¿Hay alguna función común (en apache commons o similar) para hacer mapas a partir de cadenas similares a parámetros de consulta?función java común para crear mapas a partir de cadenas

Para específico:

una variante (Querystring)

s="a=1&b=3" 
=> Utils.mapFunction(s, '&', '=') 
=> (Hash)Map { a:1; b:3 } 

Variante b (CacheControl-Header)

s="max-age=3600;must-revalidate" 
=> Utils.mapFunction(s, ';', '=') 
=> (Hash)Map { max-age:3600; must-revalidate:true } 

no quiero reinventar la rueda.

Gracias

Respuesta

1

Parece que una simple extensión del HashMap lo haría:

/** 
* Simple demo of extending a HashMap 
*/ 
public class TokenizedStringHashMap extends HashMap<String, String> { 

    void putAll(String tokenizedString, String delimiter) { 
    String[] nameValues = tokenizedString.split(delimiter); 
    for (String nameValue : nameValues) { 
     String[] pair = nameValue.split("="); 
     if (pair.length == 1) { 
     // Duplicate the key name if there is only one value 
     put(pair[0], pair[0]); 
     } else { 
     put(pair[0], pair[1]); 
     } 
    } 
    } 

    public static void main(String[] args) { 
    TokenizedStringHashMap example = new TokenizedStringHashMap(); 

    example.putAll("a=1&b=3", "&"); 
    System.out.println(example.toString()); 
    example.clear(); 

    example.putAll("max-age=3600;must-revalidate", ";"); 
    System.out.println(example.toString()); 

    } 
} 
1

creo que no existe tal biblioteca, pero si desea volver a implementar con muy poco código, puede utilizar "bibliotecas orientadas lambda", como Guava o LambdaJ.

2

stringtomap

¡Pruébalo o navegar por el código fuente para ver cómo se ha implementado.

Cuestiones relacionadas