Jeżeli łańcuch ma wiele wpisów może być lepiej parsowanie ręcznie bez StringTokenizer zaoszczędzić trochę pamięci (w przypadku trzeba analizować tysiące tych strun, to jest warte dodatkowych code):
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;
}
Testowałem tego kodu z tych ciągów i działa prawidłowo:
{K1 = V1}
{K1 = V1, k2 = V2 = V3 k3, k4 = v4}
{K1 = V1}
Moja parsowania biblioteki chodziło Ci regex, albo żadna osoba trzecia biblioteka? – Yishai
Czy v1, v2 ... może zawierać "=" lub ","? – sinuhepop
Załóżmy, że wartości nie zawierają "=" lub ",". Tylko bez bibliotek stron trzecich. – tinkertime