【发布时间】:2018-02-09 14:56:46
【问题描述】:
我目前正在尝试从 URL 中捕获特殊字符,以将它们更改为十六进制值(例如:“This shop”应该转换为“This%20shop”)。
我想知道是否有一些干净的方法是查看字符串以找到每个特殊字符并将它们替换为它们的 ascii 值。
我尝试这样做是因为我必须使用 GET 将 PHP 参数传递到 url。
以下是 url 的示例:
www.mysite.com/page?adress=I am Living here!
我的代码实际上从 URL 中重新放置了 '%' 和 '',但我想更改我定义的任何特殊字符。
这是我到目前为止所做的:
private final String specialChars = "!@\\[]`#$%&'()*+-<>=?";
public URL getURL(){
String tempUrl = baseURL;
Set<String> keys = this.arguments.keySet();
for (Map.Entry<String, String> entry : arguments.entrySet()) {
String value = entry.getValue();
if(entry.getValue().contains(specialChars)){
Log.e("INFO", "THIS URL CONTAINS SPECIAL CHARS");
}
//Replacing % char
if(entry.getValue().contains("%")){
Log.i("URL BUILD INFO", "URL ARGS CONTAINS '%'");
value = entry.getValue().replace("%", "%25");
}
//Replacing spaces
if(entry.getValue().contains(" ")){
Log.i("URL BUILD INFO", "URL ARGS CONTAINS SPACE");
value = entry.getValue().replace(" ", "%20");
}
baseURL += entry.getKey() + "=" + value + "&";
}
try{
this.url = new URL(baseURL);
} catch(MalformedURLException e){
Log.e("URL MALFORMED", "YOUR IS MALFORMED");
e.printStackTrace();
}
Log.d("URL IS VALID", url.toString());
return url;
}
根据我对String documentation 的理解,只有当我的 URL 与我的 specialChars charSequence 完全匹配时,matches 方法才应该返回 true,这不是我想要的。但是我在String documentation 上找不到任何其他方法来实现我想要实现的目标。
【问题讨论】:
-
我现在就去检查。
-
@SLaks 您应该将其发布为答案以回答此问题
标签: java regex string pattern-matching