C# – 子字符串:索引和长度必须引用字符串中的位置

我有一个看起来像的字符串

string url = "www.example.com/aaa/bbb.jpg"; 

“www.example.com/”长度固定为18。 我想从这个字符串中获取“aaa / bbb”部分(实际的url不是示例,也不是aaa / bbb,长度可能会有所不同)

所以这就是我的所作所为:

 string newString = url.Substring(18, url.Length - 4); 

然后我得到了exception:索引和长度必须引用字符串中的位置。 我的代码有什么问题以及如何修复它? 提前致谢。

Substring的第二个参数是Substring的长度,而不是结束索引。

您可能应该包括处理,以确定它确实以您期望的开头,以您期望的结束,并且至少与您期望的一样长。 然后,如果它不匹配,您可以做其他事情或抛出有意义的错误。

下面是一些示例代码,用于validationurl是否包含您的字符串,还有一些重构,以便更容易将前缀/后缀更改为strip:

 var prefix = "www.example.com/"; var suffix = ".jpg"; string url = "www.example.com/aaa/bbb.jpg"; if (url.StartsWith(prefix) && url.EndsWith(suffix) && url.Length >= (prefix.Length + suffix.Length)) { string newString = url.Substring(prefix.Length, url.Length - prefix.Length - suffix.Length); Console.WriteLine(newString); } else //handle invalid state 

你的错误是Substring的参数。 第一个参数应该是起始索引,第二个参数应该是startindex的长度或偏移量。

 string newString = url.Substring(18, 7); 

如果子串的长度可以变化,则需要计算长度。

(url.Length - 18) - 4 (或url.Length - 22 )方向的东西

最后它看起来像这样

 string newString = url.Substring(18, url.Length - 22); 

这样的事情怎么样:

 string url = "http://www.example.com/aaa/bbb.jpg"; Uri uri = new Uri(url); string path_Query = uri.PathAndQuery; string extension = Path.GetExtension(path_Query); path_Query = path_Query.Replace(extension, string.Empty);// This will remove extension 

你需要找到第一个/的位置,然后计算你想要的部分:

 string url = "www.example.com/aaa/bbb.jpg"; int Idx = url.IndexOf("/"); string yourValue = url.Substring(Idx + 1, url.Length - Idx - 4); 

试试这个:

  int positionOfJPG=url.IndexOf(".jpg"); string newString = url.Substring(18, url.Length - positionOfJPG); 
 string newString = url.Substring(18, (url.LastIndexOf(".") - 18)) 

这是另一个建议。 如果您可以将http://添加到您的url字符串,则可以执行此操作

  string path = "http://www.example.com/aaa/bbb.jpg"; Uri uri = new Uri(path); string expectedString = uri.PathAndQuery.Remove(uri.PathAndQuery.LastIndexOf(".")); 

你可以正确使用填充。

 string url = "www.example.com/aaa/bbb.jpg"; string newString=url.PadRight(4); string newString = (url.Substring(18, url.Length - 4)).Trim(); 

快乐的编码!