Если в строке много записей, возможно, лучше разбирать вручную без StringTokenizer для экономии памяти (в случае, если вам нужно проанализировать тысячи этих строк, стоит дополнительный код):
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;
}
Я проверил этот код с этими строками, и он отлично работает:
{k1 = v1}
{k1 = v1, k2 = v2, k3 = v3, k4 = v4}
{k1 = v1,}