web-dev-qa-db-ja.com

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

その後、例外が発生しました。インデックスと長さは、文字列内の場所を参照する必要があります。私のコードの何が問題になっており、どのように修正するのですか?前もって感謝します。

23
Manto

Substring の2番目のパラメーターは、サブインデックスの長さであり、終了インデックスではありません。

おそらく、期待どおりに開始し、予想どおりに終了し、少なくとも予想どおりの長さであることを確認するための処理を含める必要があります。そして、それが一致しない場合は、何か他のことを行うか、意味のあるエラーをスローすることができます。

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
46
Tim S.

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

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

部分文字列の長さが異なる場合は、長さを計算する必要があります。

(url.Length - 18) - 4(またはurl.Length - 22)の方向にあるもの

最終的には次のようになります

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

このようなものはどうですか:

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
5
HatSoft

最初の/の位置を見つけて、必要な部分を計算する必要があります。

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

これを試して:

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

パディングを使用できます。

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

ハッピーコーディング!

0
Pramod Mali

別の提案があります。 URL文字列の先頭にhttp://を追加できる場合は、これを行うことができます

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