索引65处路径中的非法字符异常[java]
我试图使用HTTPGET apache方法获取页面,但它引发了以下异常:索引65处路径中的非法字符异常[java],java,regex,url,exception-handling,web-crawler,Java,Regex,Url,Exception Handling,Web Crawler,我试图使用HTTPGET apache方法获取页面,但它引发了以下异常: Illegal character in path at index 65: http://doctorat.tuiasi.ro/Htm/Proiecte_POSDRU_17.02.2013/Proiecte europene.html 我知道空间可能是问题的原因,但我正在尝试像那样过滤url String url=everyUrl.getUrl().replaceAll(" ", "%20");
Illegal character in path at index 65: http://doctorat.tuiasi.ro/Htm/Proiecte_POSDRU_17.02.2013/Proiecte europene.html
我知道空间可能是问题的原因,但我正在尝试像那样过滤url
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());
}
}
我做错了什么?有人能帮我吗?问题是,您的正则表达式正在查找有效字符串。事实上,它正在查找两个有效字符串。看看我的意思。它找到了两个匹配的组 您需要确保仅当整个字符串匹配时才匹配。您可以用
^
和$
包围正则表达式,如下所示:
"^([A-Za-z0-9_.~:/?\\#\\[\\]@!$&'()*+,;" + "=-]|%[0-9a-fA-F]{2})+$"
但是,此模式可能会匹配您不想要的内容,例如something%2else
。要仅允许有效的百分比编码,您可能需要以下内容:
"^(%[0-9a-fA-F]{2}|[^%][A-Fa-f0-9]|[G-Zg-z_.~:/?\\#\\[\\]@!$&'()*+,;=-])+$"
什么是完整堆栈跟踪?在代码的哪一行发生异常?URL中不允许使用空格。你在“Proiecte europene.html”@riannel中有一个是完整堆栈的tracese@litelite,我知道,但我已经测试了id,不应该通过测试,但它是真的,我不知道为什么我不尝试修复正则表达式。我更新了答案。在答案中添加了更好的正则表达式。