2012-03-04 84 views
0

我有一個bug產生的網址的名字,我會自動導入到我的應用程序 例如,目前我通過這樣的生成的名字

www.example.com/some-dir/page.htm becomes example.com 

但提取的主機名生成URL名稱我得到一個有趣的錯誤,當我有網址,如這些

www.example.com/some-dir/page.htm 
www.example.com/another-dir/page.htm 
www.example.com/yet-another-dir/another-page.htm 

所以目前我嘗試通過添加一個數字來命名這樣

www.example.com/some-dir/page.htm = example.com 
www.example.com/another-dir/page.htm = example.com1 
www.example.com/yet-another-dir/another-page.htm = example.com2 
修復

,但我認爲有可能是一個更好的方法,一個例子,我覺得是這些

www.example.com/some-dir/page.htm = example.com 
www.example.com/another-dir/page.htm = example1.com 
www.example.com/yet-another-dir/another-page.htm = example2.com 

,但任何人都可以提出更好的東西或我怎麼能做到在這段代碼最後的變動?

感謝

+0

您首先討論**生成**網址,然後再談論**提取**域名,那麼......問題是什麼? – AVIDeveloper 2012-03-04 20:11:59

+0

我做了一些編輯,但我正在談論爲網址生成名稱 – Smith 2012-03-04 20:18:27

+0

動機是什麼?你需要一個字典的唯一名稱? (例如用GUID解決),你需要獨特的顯示名稱?,如果你兩次得到完全相同的URL,你想擁有相同的名稱還是不同的名稱? – AVIDeveloper 2012-03-04 20:29:54

回答

1

創建字典映射域名的整數計數器,例如:


Dictionary<string, int> m_domainNameToCounterMap

然後,通過提取域名,並匹配了對字典維護您的計數器

private static void DomainNameTest() 
{ 
    Dictionary<string, int> m_domainNameToCounterMap; 

    string domainName; 
    if (!m_domainNameToCounterMap.ContainsKey(domainName)) 
    { 
     m_domainNameToCounterMap.Add(domainName, 1); // Initial counter 
    } 

    int domainCounter = m_domainNameToCounterMap[ domainName ]; 

    // Do some smart naming convention 
    Regex re = new Regex("(.*)(\.[^\.]+)$"); 
    Match m = re.Match(domainName); 
    if (m.Success) 
    { 
     domainName = string.Format("{0}{1}{2}", m.Groups[1], domainCounter, m.Groups[2]); 
    } 

    // Inc. counter for next time 
    m_domainNameToCounterMap[ domainName ] = m_domainNameToCounterMap[ domainName ] + 1; 
} 

您可以在正則表達式的一點幫助之前添加計數器。

(*)注意:我沒有編譯代碼,所以它可能無法正常工作,但是您會得到一般想法。