索引65异常[java]中路径中的非法字符

时间:2017-05-17 17:30:21

标签: 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

我知道那里的空间可能是问题的原因但我试图过滤这样的网址

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());

                }
            }

我做错了什么?有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:1)

问题是,你的正则表达式找到了一个有效的字符串。事实上,它找到了两个有效的字符串。看看this,看看我的意思。它找到了两个匹配组。

如果整个字符串匹配,您需要确保只匹配。您可以使用^$围绕正则表达式执行此操作,如下所示:

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

但是,此模式可能会匹配您不想要的内容,例如something%2else。要仅允许有效的百分比编码,您可能需要以下内容:

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