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

の 2 番目のパラメーター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

あなたの間違いは、サブストリングへのパラメーターです。最初のパラメータは開始インデックスで、2 番目のパラメータは長さまたは開始インデックスからのオフセットである必要があります。

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 に答える