问题描述
我需要通过一个字符串进行枚举,查找所有[],并在其中找到文本,然后用不同的内容替换所有文本。
例如:
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";
}
1楼
这是您所缺少的:
// how do I get the matches?
while(matcher.find()) {
String key = matcher.group(1); //THE VALUE INSIDE THE SQUARE BRACKETS
另外,您可能想看看文档中的示例代码,并将其用作起点。
2楼
我建议一个非常简单的方法。
如果您可以使用Apache Commons ,那么您可以:
String s = "id=[USER_ID]&record=[CALL_KEY]&someother=[OTHER_STUFF]";
String[] arrayKeys = StringUtils.substringsBetween(s, "[", "]")
arrayKeys将包含“ []”之间的键。 然后,应将“ [“ + arrayKeys [0] +”] “替换为您的值。