web-dev-qa-db-ja.com

"/"に基づいて文字列(URIのパス)を分割する

誰かが私を正しい方向に向けることができるかどうか疑問に思います。私が達成したいのは、「/」を含む文字列に基づいて文字列を分割することです。たとえば、コード(c#)でwww.site.com/course/123456/216があった場合、123456を変数param1に割り当て、216をparam2に割り当てることができるように、コードで文字列を分割できるようにしたいと考えています。 (コースはページの「わかりやすい」名前です)。文字列に3番目の「/」を追加する場合、param3などになるようにしたいです。

理想的には、このコードを、動作させるために必要なユーザーコントロールに含めることができる場所に配置できるようにしたいと考えています。

15
SxChoc

ri.Segments 多分あなたが探しているもの:

new Uri("http://www.contoso.com/foo/bar/index.htm#search").Segments

[ "/", "foo/", "bar/", "index.html" ]の結果

23
Alexei Levenkov

なぜ分割を使用しないのですか?

var valueArray = "www.site.com/course/123456/216".Split('/');

配列は文字列全体が分割されます

インデックス0は「www.site.com」などになります。

7
Smeegs
HttpContext.Current.Request.Url.AbsolutePath.Split('/')
3
Robert McKee

まあ、値がnotであることを仮定にすることは/それら:

var splitVals = queryString.Split('/');
var vals = new Dictionary<string, string>();
for (int i = 2; i <= splitVals.Count; i++)
{
    vals.Add(string.Format("param{0}", i), vals[i]);
}

それはあなたを始めるでしょう。ここで、それらを実際の変数に設定する場合は、キャストを行い、リフレクションを利用する必要がありますが、実際の仮定を行うのに十分なほど明確ではありません。

編集

このコードを再利用可能にするには、拡張メソッドを作成します。

namespace System
{
    public static class StringExtensions
    {
        public static Dictionary<string, string> SplitQueryString(this string queryString)
        {
            var splitVals = queryString.Split('/');
            var vals = new Dictionary<string, string>();
            for (int i = 2; i <= splitVals.Count; i++)
            {
                vals.Add(string.Format("param{0}", i), vals[i]);
            }

            return vals;
        }
    }
}

あなたはこれを行うことができるので:

var vals = queryString.SplitQueryString();
2
Mike Perrenoud

http://msdn.Microsoft.com/en-us/library/b873y76a.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1

string QueryString = "1234/567/890"; string[] QueryArray = QueryString.Split('/');

QueryArray[0] = 1234QueryArray[1] = 567QueryArray[2] = 890

1
Alfie

uRL:server/func2/SubFunc2

//パスコンポーネントを取得します。末尾のセパレータ。 {"/"、 "func2 /"、 "sunFunc2"}を返します。 string[] pathsegments = myUri.Segments;

1
Max Hodges