Se la stringa ha molte voci che potrebbe essere meglio di parsing manualmente senza uno StringTokenizer per risparmiare un po 'di memoria (nel caso in cui si deve analizzare migliaia di queste stringhe, vale la pena il codice aggiuntivo):
public static Map parse(String s) {
HashMap map = new HashMap();
s = s.substring(1, s.length() - 1).trim(); //get rid of the brackets
int kpos = 0; //the starting position of the key
int eqpos = s.indexOf('='); //the position of the key/value separator
boolean more = eqpos > 0;
while (more) {
int cmpos = s.indexOf(',', eqpos + 1); //position of the entry separator
String key = s.substring(kpos, eqpos).trim();
if (cmpos > 0) {
map.put(key, s.substring(eqpos + 1, cmpos).trim());
eqpos = s.indexOf('=', cmpos + 1);
more = eqpos > 0;
if (more) {
kpos = cmpos + 1;
}
} else {
map.put(key, s.substring(eqpos + 1).trim());
more = false;
}
}
return map;
}
ho provato questo codice con queste stringhe e funziona benissimo:
{k1 = v1}
{k1 = v1, v2 = k2, k3 = v3, v4 k4 =}
{k1 = v1,}
Biblioteca parsing vuoi dire regex, o nessuna terza parte biblioteca? – Yishai
Can v1, v2 ... contengono '=' o ','? – sinuhepop
Supponiamo che i valori non contengano '=' o ','. Solo no libs di terze parti. – tinkertime