text.Substring / text.IndexOf并不总是返回正确的值

时间:2014-11-17 10:19:57

标签: c#

当我在做一个text.Substring时,它并不总是返回正确的值,具体取决于我正在搜索的文本中表达式的存在位置。

例如,我对文件的内容有一个text.substring,我基本上想要获取将在文件中的任何位置指定的URL,但URL的最后部分将始终不同。它的格式为http://myURL:1234/My/Folder/Here

所以这是我的代码:

try
{ 
    string text = File.ReadAllText(Path.Combine(textFilePath.Text,filename));

    string FoundName = text.Substring(text.IndexOf("http://", 0) + 7, text.IndexOf(":1234/", 0) - 7);

    if (!listBox4.Items.Contains(FoundName))
    {
        listBox4.Items.Add(FoundName);
    }
}

现在,如果URL存在于文件的开头(位置0),那么它可以正常工作。

如果它存在于文件中的任何其他位置,例如位置44,则FoundName字符串返回:

myURL:1234/My/Folder/Here代替:myURL

如果它存在于位置0,则返回正确的myURL。

任何建议都会很棒。

谢谢!

2 个答案:

答案 0 :(得分:2)

你需要:

string foundName = text.Substring(
    text.IndexOf("http://") + 7,
    text.IndexOf(":1234/") - text.IndexOf("http://") - 7
    );

或者使用临时变量:

int idxDomainStart = text.IndexOf("http://") + 7;
string foundName = text.Substring(idxDomainStart,
    text.IndexOf(":1234/") - idxDomainStart);

答案 1 :(得分:2)

string.SubString将长度作为其第二个参数,而不是索引:

int start = text.IndexOf("http://", 0) + 7;
int end = text.IndexOf(":1234/", 0);
string FoundName = text.Substring(start, end - start);