Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Android > Что делает этот код с Regexp?


Автор: motorway 13.7.2013, 23:35
Код

private static Map<String, String> parseMetadata(String metaString) {
    Map<String, String> metadata = new HashMap<String, String>();
    String[] metaParts = metaString.split(";");
    Pattern p = Pattern.compile("^([a-zA-Z]+)=\\'([^\\']*)\\'$");
    Matcher m;
    for (int i = 0; i < metaParts.length; i++) {
        m = p.matcher(metaParts[i]);
        if (m.find()) {
            metadata.put(((String) m.group(1)).trim(), ((String) m.group(2)).trim());
        }
    }

    return metadata;
}

Автор: _zorn_ 15.7.2013, 05:16
Парсит строку вида paramA='value1';paramB='value2' и засовывает в metadata все пары разделенные точкой запятой, причем значения (value) без кавычек.
Параметры могут состоять только из маленьких и больших английских букв, значения - любые символы кроме одинарной кавычки.

Автор: motorway 15.7.2013, 11:13
Спасибо большое. А как модифицировать код, чтобы значения могли содержать одинарную кавычку? Или тогда уже нарушается принцип разделения? На практике у меня встречаются значения с такой кавычкой.

Автор: _zorn_ 16.7.2013, 06:59
Pattern p = Pattern.compile("^([a-zA-Z]+)=(.*)$");
Тогда нужно передавать значения без кавычек (paramA=value1;paramB=value2)
Если нужны кавычки (хотя зачем ?), то
Pattern p = Pattern.compile("^([a-zA-Z]+)=\\'(.*)\\'$");

Автор: motorway 16.7.2013, 13:38
Это ID3 теги, напр. названия песен. Название песни вполне может содержать кавычку. "It's good"

Автор: motorway 16.7.2013, 14:03
Спасибо за Regexp!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)