我正在尝试使用HTTPGET apache方法获取页面,但它引发了这个异常:

Illegal character in path at index 65: http://doctorat.tuiasi.ro/Htm/Proiecte_POSDRU_17.02.2013/Proiecte europene.html


我知道外面的空格可能是问题的原因,但我正在尝试像这样过滤网址

String url=everyUrl.getUrl().replaceAll(" ", "%20");
                if (url.contains("http://")) {
                    Pattern allowedUrlCharacters = Pattern
                            .compile("([A-Za-z0-9_.~:/?\\#\\[\\]@!$&'()*+,;" + "=-]|%[0-9a-fA-F]{2})+");
                    Matcher matcher = allowedUrlCharacters.matcher(url);
                    if (matcher.find()) {
                        pushInFrontQueues(url);
                    }
                    // System.out.println(this.frontQueues.get(0).size());

                }
            }


我做错了什么?谁能帮我吗?

最佳答案

问题是,您的正则表达式正在查找有效的字符串。实际上,它正在查找两个有效的字符串。看看this明白我的意思了。它找到了两个匹配的组。

您需要确保仅在整个字符串匹配时才匹配。您可以通过用^$包围正则表达式来做到这一点,如下所示:

"^([A-Za-z0-9_.~:/?\\#\\[\\]@!$&'()*+,;" + "=-]|%[0-9a-fA-F]{2})+$"


但是,此模式可能会匹配您不想要的内容,例如something%2else。为了只允许有效的百分比编码,您可能需要这样的东西:

"^(%[0-9a-fA-F]{2}|[^%][A-Fa-f0-9]|[G-Zg-z_.~:/?\\#\\[\\]@!$&'()*+,;=-])+$"

07-26 00:06
查看更多