@Override
public Fuzzy<T> convert(String string, Type type) {
string = string.trim();
if (string.startsWith("[") && string.endsWith("]")) {
string = string.substring(1, string.length() - 1);
}
String[] parts = string.split(",", 0);
Builder<T> builder = new Builder<T>();
for (String part : parts) {
int colon = part.indexOf(':');
if (colon < 0) {
builder.addWeighted(parse(part.trim()), BigDecimal.ONE);
} else {
int percent = part.indexOf('%');
if (percent >= 0 && percent < colon) {
BigDecimal probability = new BigDecimal(part.substring(0, percent).trim()).divide(BigDecimal.valueOf(100));
builder.addFixed(parse(part.substring(colon + 1).trim()), probability);
} else {
BigDecimal weight = new BigDecimal(part.substring(0, colon).trim());
builder.addWeighted(parse(part.substring(colon + 1).trim()), weight);
}
}
}
return builder.create();
}