@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(); }