2017-05-17 47 views
0

我試圖使用HTTPGET apache的方法來獲取一個網頁,但它引發我此異常:非法字符的路徑索引65例外【JAVA]

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

網址不允許使用空格。你有一個在「Proiecte europene.html」 – litelite

+0

@RiaanNel這是完整的堆棧跟蹤 –

回答

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_.~:/?\\#\\[\\]@!$&'()*+,;=-])+$" 
+0

對不起,我不知道爲什麼我不試圖修復正則表達式。我更新了答案。 – dumptruckman

+0

給答案增加了一個更好的正則表達式。 – dumptruckman

相關問題