编辑:
目标:http://localhost:8080/api/upload/form/test/test
Is it possible to have some thing like `{a-b, A-B..0-9}` kind of pattern and match them and replace with value.
我有以下字符串
http://localhost:8080/api/upload/form/{uploadType}/{uploadName}
可能没有像{uploadType}/{uploadName}
这样的字符串。
如何用java中的某些值替换它们?
答案 0 :(得分:1)
[编辑]显然你不知道你要寻找什么替代品,或者没有合理的有限地图。在这种情况下:
Pattern SUBST_Patt = Pattern.compile("\\{(\\w+)\\}");
StringBuilder sb = new StringBuilder( template);
Matcher m = SUBST_Patt.matcher( sb);
int index = 0;
while (m.find( index)) {
String subst = m.group( 1);
index = m.start();
//
String replacement = "replacement"; // .. lookup Subst -> Replacement here
sb.replace( index, m.end(), replacement);
index = index + replacement.length();
}
看,我现在真的期待+1。
[更简单的方法] String.replace()
是一个'简单的替代'&易于使用,适合您的用途;如果你想要正则表达式,你可以使用String.replaceAll()
。
对于多个动态替换:
public String substituteStr (String template, Map<String,String> substs) {
String result = template;
for (Map.Entry<String,String> subst : substs.entrySet()) {
String pattern = "{"+subst.getKey()+"}";
result = result.replace( pattern, subst.getValue());
}
return result;
}
这就是快速&amp;简单的方法,开始。
答案 1 :(得分:0)
您可以通过以下方式使用replace方法:
String s = "http://localhost:8080/api/upload/form/{uploadType}/{uploadName}";
String typevalue = "typeValue";
String nameValue = "nameValue";
s = s.replace("{uploadType}",value).replace("{uploadName}",nameValue);
答案 2 :(得分:0)
您可以从{uploadType}开始直到结束。 然后,您可以使用“split”将该字符串拆分为字符串数组。 是第一个单元格(0)是类型,1是名称。
答案 3 :(得分:0)
String s = "http://localhost:8080/api/upload/form/{uploadType}/{uploadName}";
String result = s.replace("uploadType", "UploadedType").replace("uploadName","UploadedName");
编辑:试试这个:
String r = s.substring(0 , s.indexOf("{")) + "replacement";
答案 4 :(得分:0)
解决方案1:
String uploadName = "xyz";
String url = "http://localhost:8080/api/upload/form/" + uploadName;
解决方案2:
String uploadName = "xyz";
String url = "http://localhost:8080/api/upload/form/{uploadName}";
url.replace("{uploadName}",uploadName );
解决方案3:
String uploadName = "xyz";
String url = String.format("http://localhost:8080/api/upload/form/ %s ", uploadName);
答案 5 :(得分:-1)
UriBuilder
正是您所需要的:
UriBuilder.fromPath("http://localhost:8080/api/upload/form/{uploadType}/{uploadName}").build("foo", "bar");
结果:
http://localhost:8080/api/upload/form/foo/bar