Прежде всего вы должны использовать библиотеку CSV для анализа значений, разделенных запятыми. Правильно анализ данных CSV не так тривиален, как кажется на первый взгляд.Есть множество веских аргументов , чтобы не изобретать это колесо.
Это также будет проверять в будущем ваш код и будет кодом, который вам не нужно тестировать или поддерживать.
Я знаю, что соблазн сделать что-то вроде data.split(',');
силен, но это хрупкое и хрупкое решение.Например, что если какое-либо из значений содержит символ ','.
Второе, что вам нужно сделать, - это затем проанализировать пары.Снова искушение использовать String.split("=");
будет сильным, но оно может быть хрупким и хрупким, если в правой части =
есть =
.
Я не слепой сторонник регулярных выражений, но при сдержанности они могут быть просто подходящим инструментом для работы.Вот регулярное выражение для разбора пар имя-значение.
Регулярное выражение ^ (. *) \ S? = \ S? ("? ([^"] *) "? |"(. *) ") $ , щелкните регулярное выражение, чтобы проверить его в интерактивном режиме. Это работает даже для нескольких двойных кавычек в правой части пары имя-значение.
Это будет соответствовать только тому, чтонаходится с левой стороны от первого =
, а все остальное с правой стороны и убирает необязательные значения "
со строковых значений, в то же время сопоставляя значения без кавычек.
УчитываяList<String> list
кодированных пар имя-значение.
final Pattern p = Pattern.compile("^(.*)\s?=\s?("?([^"]*)"?|"(.*)")$");
final Map<String, String> map = new HashMap<String, String>(list.size());
for (final String nvp : list)
{
final Matcher m = p.matcher(nvp);
m.matches();
final String name = m.group(1);
final String value = m.group(2);
System.out.format("name = %s | value = %s\n", name, value);
}