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

时间:2012-06-21 23:25:16

标签: c# .net string exception substring

我有一个看起来像

的字符串
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);

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

9 个答案:

答案 0 :(得分:45)

Substring中的第二个参数是子字符串的长度,而不是结束索引。

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

这是一些示例代码,用于验证url是否包含您的字符串,还有一些重构,以便更容易将前缀/后缀更改为条带:

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

答案 1 :(得分:6)

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

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

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

(url.Length - 18) - 4(或url.Length - 22

方向的某些内容

最后它看起来像这样

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

答案 2 :(得分:5)

这样的事情怎么样:

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

答案 3 :(得分:4)

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

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

答案 4 :(得分:2)

试试这个:

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

答案 5 :(得分:2)

string newString = url.Substring(18, (url.LastIndexOf(".") - 18))

答案 6 :(得分:0)

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

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

答案 7 :(得分:0)

你可以正确使用填充。

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

快乐的编码!

答案 8 :(得分:0)

您需要像这样检查您的声明:

string url = "www.example.com/aaa/bbb.jpg";
string lenght = url.Lenght-4;
if(url.Lenght > 15)//eg 15
{
 string newString = url.Substring(18, lenght);
}