Модераторы: javastic
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Что делает этот код с Regexp? с исходной строкой 
:(
    Опции темы
motorway
  Дата 13.7.2013, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 578
Регистрация: 2.3.2008

Репутация: нет
Всего: 0



Код

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;
}

PM MAIL   Вверх
_zorn_
Дата 15.7.2013, 05:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 21.8.2007

Репутация: нет
Всего: 12



Парсит строку вида paramA='value1';paramB='value2' и засовывает в metadata все пары разделенные точкой запятой, причем значения (value) без кавычек.
Параметры могут состоять только из маленьких и больших английских букв, значения - любые символы кроме одинарной кавычки.
PM MAIL   Вверх
motorway
Дата 15.7.2013, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 578
Регистрация: 2.3.2008

Репутация: нет
Всего: 0



Спасибо большое. А как модифицировать код, чтобы значения могли содержать одинарную кавычку? Или тогда уже нарушается принцип разделения? На практике у меня встречаются значения с такой кавычкой.
PM MAIL   Вверх
_zorn_
Дата 16.7.2013, 06:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 21.8.2007

Репутация: нет
Всего: 12



Pattern p = Pattern.compile("^([a-zA-Z]+)=(.*)$");
Тогда нужно передавать значения без кавычек (paramA=value1;paramB=value2)
Если нужны кавычки (хотя зачем ?), то
Pattern p = Pattern.compile("^([a-zA-Z]+)=\\'(.*)\\'$");
PM MAIL   Вверх
motorway
Дата 16.7.2013, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 578
Регистрация: 2.3.2008

Репутация: нет
Всего: 0



Это ID3 теги, напр. названия песен. Название песни вполне может содержать кавычку. "It's good"
PM MAIL   Вверх
motorway
Дата 16.7.2013, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 578
Регистрация: 2.3.2008

Репутация: нет
Всего: 0



Спасибо за Regexp!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Android | Следующая тема »


 




[ Время генерации скрипта: 0.0860 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.