2011-05-10 36 views
1

我需要生成有效的URL。有一個Java的URL有效生成器?

例如:我通過url:google.com。發電機返回http://google.com/

有些瀏覽器會這樣做。我試圖做我自己的算法,但失敗了。

又如:www.yadayadayada.com/../test返回http://www.yadayadayada.com/test/

public String generateValidURL(String url) { 
    int pos = 0;   
    try { 
     url = url.trim(); 
     url = url.replaceAll(" ", "%20"); 
     if (url.startsWith("http") && (!url.substring(4).startsWith("://"))) { 
      for (int i = 4; i < 7; i++) { 
       if ((url.charAt(i) == '/') || (url.charAt(i) == ':')) { 
        pos = i; 
       } 
      } 
      url = url.substring(pos + 1); 
     } 
     if(url.startsWith("https")){ 
      url = url.replace("https", "http"); 
     } 
     if (!url.startsWith("http")) { 
      url = "http://" + url; 
     } 
     if (!url.substring(7).contains("/")) { 
      url += "/"; 
     } 
     url = url.replace(",", "."); 
     url = url.replace("../", "/"); 
     url = url.substring(0, 7) + url.substring(7).replace("//", "/");    
     return url; 
    } catch (Exception e) { 
     System.out.println("Error generating valid URL : " + e); 
     return null; 
    } 
} 
+0

請顯示您的代碼。 – 2011-05-10 14:08:20

+0

附加到URL的額外斜槓不是問題。 – Nishant 2011-05-10 14:09:59

+0

@Vladimir代碼已發佈。 – 2011-05-10 14:36:35

回答

4

更新:現在是更清楚你想要達到的目標 - 我不認爲有一個實用工具那。你的方法應該做,只是調試它。

原來的答覆:

URL url = new URL("http", domain, "/"); 
String output = url.toExternalForm(); 

事實上,你可能想使用URI類代替:

URI uri = new URI("http", "google.com", "/test", null); 

您可以使用uri.resolve("../relativePath"),它會得到解決。但有一點與/../test == /test你的例子是不妥當的(你必須手動處理這種情況)

+0

簡答:使用URL類。還有其他的構造函數和函數,Bozho有點過於簡潔,但關鍵是看那個類。 – Jay 2011-05-10 14:11:47

0

MockNeat有正是這樣做的一個方法 - 它基於一組預定義的約束有效網址。

例如:

MockNeat m = MockNeat.threadLocal(); 

m.urls() 
    .scheme(HTTP) // all the URLS have a HTTP scheme 
//.auth() -- can include auth information in the URL 
    .domain(POPULAR) // only popular domain names can be used 
    .host(ADVERB_VERB) 
    .ports(80, 8080, 8090) // only the following ports can be used 
    .list(10) 
    .consume(System.out::println); 

將產生10個網址看起來像這樣的列表:

[http://www.tenthlyassays.net:8090, http://www.aflamecurr.io:8080, http://www.thirdlygirth.org:8080, http://www.foreprobates.net:8090, http://www.pokilyrile.org:80, http://www.cheerfullyapprizings.net:8090, http://www.whistlinglyunsettles.info:80, http://www.gratistrichinized.io:8080, http://www.sternwardssnuffle.gov:8090, http://www.yesterdaynix.edu:8090] 

你可以在項目的wiki文檔。

聲明:我是該圖書館的開發人員之一。

相關問題