当前位置: 代码迷 >> Android >> 正则表达式在一个字符串中包含多个不同的值
  详细解决方案

正则表达式在一个字符串中包含多个不同的值

热度:63   发布时间:2023-08-04 11:19:05.0

我需要通过一个字符串进行枚举,查找所有[],并在其中找到文本,然后用不同的内容替换所有文本。

例如:

HTTP:\\ www.domain.com \\ ID = [USER_ID]&记录= [CALL_KEY]一些其它= [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]等,我想动态读取其中的内容并注入该值。

我在Objective-C中使用了RegEx enumerateMatchesInString ,是否有等效的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";
    }

这是您所缺少的:

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

另外,您可能想看看文档中的示例代码,并将其用作起点。

我建议一个非常简单的方法。

如果您可以使用Apache Commons ,那么您可以:

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

arrayKeys将包含“ []”之间的键。 然后,应将“ [“ + arrayKeys [0] +”] “替换为您的值。