2012-03-04 70 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; 
} 

您可以在正则表达式的一点帮助之前添加计数器。

(*)注意:我没有编译代码,所以它可能无法正常工作,但是您会得到一般想法。