我正在尝试使用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_.~:/?\\#\\[\\]@!$&'()*+,;=-])+$"