我正在尝试用不同的值替换几个不同的字符。例如,如果我有:#love hate
,那么我想做的就是回来%23love%20hate
是否与群组有关?我试图理解使用群组,但我真的不明白。
答案 0 :(得分:6)
您可以尝试这样做:
String encodedstring = URLEncoder.encode("#love hate","UTF-8");
它会为您提供所需的结果。要扭转它,你应该这样做:
String loveHate = URLDecoder.decode(encodedstring);
答案 1 :(得分:3)
您不需要RegEx来替换单个字符。 RegEx对于这些场所来说是一种过度杀伤力。对于要替换的每个字符,只需在循环中使用String类的普通替换方法即可。
String output = input.replace("#", "%23");
output = output.replace(" ", "%20");
您想要替换多少个这样的角色?
答案 2 :(得分:2)
如果您尝试将URL编码为utf-8,或者使用现有类进行某些编码会更容易
例如
commons-httpclient项目
URIUtil.encodeWithinQuery(input,"UTF-8");
答案 3 :(得分:1)
不,你需要多次替换。另一种选择是使用group来查找下一个出现的几个字符串之一,检查字符串是什么并适当地替换,可能使用映射。
答案 4 :(得分:1)
答案 5 :(得分:1)
正如Mat所说,解决这个问题的最好方法是使用URLEncoder。但是,如果您坚持使用正则表达式,请参阅java.util.regex.Matcher.appendReplacement
文档中的示例代码:
Pattern p = Pattern.compile("cat");
Matcher m = p.matcher("one cat two cats in the yard");
StringBuffer sb = new StringBuffer();
while (m.find()) {
m.appendReplacement(sb, "dog");
}
m.appendTail(sb);
System.out.println(sb.toString());
在循环中,您可以使用m.group()
查看匹配的子字符串,然后根据该字符串进行自定义替换。这种技术可用于通过在地图等中查找$ {variables}来替换它们。