当我在做一个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。
任何建议都会很棒。
谢谢!
答案 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);