2010-01-19 31 views
-3

我想對URL進行一些操作。URL操作

,要求在已創建的URL添加子域名就像圖所示

輸入

String inputURL = "http://www.myhost.com"; 
String subdomain = "newlocation"; 

輸出

String output = "http://www.newlocation.myhost.com"; 

我就在想,如果有任何現有實用工具類,可以爲我做這個。專家可以有話要說。

感謝您的幫助!

+0

@Paul Tomblin,+1,這是一個恥辱,你不能得到代表。 –

+0

指出該網站的規則並不完全適用,但總的來說是件好事。 – Bozho

+0

更是如此。我輕笑,然後嘆了口氣。 –

回答

5

注意,「WWW」也是子域。所以你實際上正在追加另一個子域名。

String inputURL = "http://www.myhost.com"; 
    String subdomain = "newlocation"; 

    URL url = new URL(inputURL); 

    String[] domainParts = url.getHost().split("\\."); 
    StringBuilder sb = new StringBuilder(); 
    for (int i = 0; i < domainParts.length; i ++) { 
     if (i == 1) { 
      sb.append(subdomain + "."); 
     } 
     sb.append(domainParts[i] + "."); 
    } 
    String query = ""; 
    String port = ""; 
    if (url.getQuery() != null) { 
     query = "?" + url.getQuery(); 
    } 
    if (url.getPort() != -1) { 
     port = url.getPort() + ""; 
    } 
    String output = url.getProtocol() + ":" + port + "//" + sb.toString() + "/" + url.getPath() + query; 
    System.out.println(output); 
+0

+1使用URL類,而不是重新創建URL解析器輪 –

+0

這並不意味着我不能更好(http://stackoverflow.com/questions/2093544/url-manipulation/2093990#2093990)。 :-)必須渲染不好,你的代碼有一個錯誤是將打印「http://www.newlocation.myhost.com./」 –

+0

是的,這對我很有用。 但此代碼片段僅適用於帶有「www」的網址。如果我的網址不包含「www」,則在位置1添加子域名;作爲條件如果循環。 我打算使用這個,因爲我的URL總是會包含www。 還有一件事 sb.append(domainParts [i] +「。」); 您不必添加「。」在每個子域中,因爲它在'com'之後也被添加。順便說一下,我已經改變了這種方法,並讓它工作。 –

0

StringBuffer(鏈接到Java API文檔),然後你可能需要使用的insert()方法

+0

好阿米特; 這可以做,我也想到這一點。但是我正在尋找一些URL實用程序類來獲得開箱即用的幫助。 現在想一下在URL中沒有www的情況。那麼你會建議我把這個作爲一個特例來檢查嗎? 對不起!沒有!我不會這麼想。只要沒有其他優雅的選擇。 :) –

+0

您尋找的解決方案有多優雅?自己編寫一個Java類,把它放在那裏,讓其他人也能從中受益。這將是優雅的:) – 2010-01-19 13:14:13

+0

是的阿米特;這很好,我已經在制定計劃。 –

2

也許有:

String output = inputURL.replaceAll("(http://[^.]+\\.)(.*)", "$1" + subdomain + ".$2"); 
+0

已編輯,因此它匹配任何網址的第一個元素,而不僅僅是www。 –

+0

我不知道你做了什麼迪恩!但它是神奇的。謝謝你的回答。我將學習這些符號,並將在任何其他情況下使用。 –

3

僅解析URL的主機部分並使用URI進行呈現就足夠了。

URL url = new URL(inputURL); 
String host = url.getHost().replaceAll("(([.][^.]+){2,2})$", "." + subdomain + "$1"); 
String newUrl = new URI(url.getProtocol(), host, url.getPath(), url.getQuery(), null).toString();