是否有一种干净的方法来检查String是否包含来自其他String

时间:2018-02-09 14:56:46

标签: java regex string pattern-matching

我目前正试图从URL中捕获特殊字符,将其更改为十六进制值(例如:"此商店"应转换为"此%20商店" )。
我想知道是否有一些干净的是查看字符串以找到每个特殊的字符并将它们替换为它们的ascii值。 我尝试这样做是因为我必须使用GET将PHP参数传递到url。

这是一个网址示例: www.mysite.com/page?adress=I am Living here!


我的代码实际上重新获得了'%'和' '来自网址,但我想更改我定义的任何特殊字符。 这是我到目前为止所做的:

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的理解,如果我的网址与我的specialChars charSequence完全匹配,则匹配方法应该只返回true,这不是我想要的。但我无法找到任何其他方法来完成我在String documentation上尝试实现的目标。

1 个答案:

答案 0 :(得分:1)

如果您只是尝试处理网址编码,那么就有现成的解决方案 - 请参阅URLEncoderURLDecoder(之前的好回答here