2017-02-15 5 views
0

Мне нужно перечислить строку, находящую все [], и получить текст между ними и заменить его всем чем-то другим.Regex Несколько разных значений в одной строке

Например:

HTTP: \ www.domain.com \ ид = [USER_ID] & звукозаписывающей = [CALL_KEY] & someother = [OTHER_STUFF]

Как она стоит сейчас я должен жесткий код каждый отдельный ключ и замените его значением.

private String injectValues(String url) { 

    String injected = url.replace("[CALL_KEY]", "123"); 
    injected = injected.replace("[USER_ID]", "some user ide"); 
    injected = injected.replace("[OTHER_STUFF]", "somethingElse"); 

    return injected; 

} 

У меня есть куча различных значений, которые могут быть подключены, а вместо жесткого кодирования [CALL-KEY] и т.д., я хотел бы динамически читать то, что там и ввести значение.

Я использовал RegEx enumerateMatchesInString в Objective-C, есть ли Android/Java-эквивалент?

Я возился с Pattern, но я не знаю об этом, чтобы заставить его работать на то, что я хочу.

private void injectValues(String url) { 

     Pattern pattern = Pattern.compile("[(.+?)]"); 
     Matcher matcher = pattern.matcher(url); 

....///EEEEEHH how do I get the matches? 
     String key = ;//THE VALUE INSIDE THE SQUARE BRACKETS 
     String aValue = someMethodToGetTheValueForKey(key); 

} 

private String someMethodToGetTheValueForKey(String key){ 
     return "Something"; 
    } 
+0

Есть уже множество вопросов о разборке querystring –

+0

Ой, отлично, не могли бы вы дать некоторые URL-адреса связанным вопросам? –

+0

Возможная дубликация [Разбор строки URI в коллекции значений] (http://stackoverflow.com/questions/13592236/parse-a-uri-string-into-name-value-collection) –

ответ

0

Это то, что вам не хватает:

// how do I get the matches? 
while(matcher.find()) { 
    String key = matcher.group(1); //THE VALUE INSIDE THE SQUARE BRACKETS 

Кроме того, вы можете захотеть взглянуть на пример кода в документации Matcher.appendReplacement и использовать его в качестве отправной точки.

0

Я предлагаю очень простой aproach.

Если бы вы могли использовать Apache Commons, лет может сделать:

String s = "id=[USER_ID]&record=[CALL_KEY]&someother=[OTHER_STUFF]"; 
String[] arrayKeys = StringUtils.substringsBetween(s, "[", "]") 

В arrayKeys будет содержит ключи между "[]". Затем вы должны заменить "[" + arrayKeys [0] + "]" для вашего значения, например.

+0

Я не могу использовать Apache Commons. Это было бы здорово, хотя –