34

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

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);

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

4

8 回答 8

62

in 第二个参数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
于 2012-06-21T23:28:19.487 回答
7

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

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

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

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

最后它看起来像这样

string newString = url.Substring(18, url.Length - 22);
于 2012-06-21T23:28:55.630 回答
6

像这样的东西怎么样:

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
于 2012-06-21T23:51:06.547 回答
4

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

string url = "www.example.com/aaa/bbb.jpg";
int Idx = url.IndexOf("/");
string yourValue = url.Substring(Idx + 1, url.Length - Idx - 4);
于 2012-06-21T23:39:00.247 回答
2

试试这个:

 int positionOfJPG=url.IndexOf(".jpg");
 string newString = url.Substring(18, url.Length - positionOfJPG);
于 2012-06-21T23:36:24.117 回答
2
string newString = url.Substring(18, (url.LastIndexOf(".") - 18))
于 2012-06-21T23:44:44.430 回答
0

这是另一个建议。如果您可以将 http:// 添加到您的 url 字符串,您可以这样做

  string path = "http://www.example.com/aaa/bbb.jpg";
  Uri uri = new Uri(path);            
  string expectedString = 
      uri.PathAndQuery.Remove(uri.PathAndQuery.LastIndexOf("."));
于 2012-06-21T23:47:52.710 回答
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);
}
于 2020-11-11T13:45:44.650 回答