2

次の文字列を分割するにはどうすればよいですか

string s = "username=bill&password=mypassword";

Dictionary<string,string> stringd = SplitTheString(s);

次のようにキャプチャできるように:

string username = stringd.First().Key;
string password = stringd.First().Values;

私にお知らせください。ありがとう

4

6 に答える 6

6

次のように辞書リストを設定できます。

Dictionary<string, string> dictionary = new Dictionary<string, string>();
string s = "username=bill&password=mypassword";

foreach (string x in s.Split('&'))
{
    string[] values = x.Split('=');
    dictionary.Add(values[0], values[1]);
}

これにより、次のようにアクセスできます。

string username = dictionary["username"];
string password = dictionary["password"];

注: この関数には検証がないことに注意してください。入力文字列が正しくフォーマットされていることを前提としています。

于 2012-05-10T15:59:46.150 に答える
5

クエリ文字列を解析しようとしているようです-これはすでに組み込まれているため、次のように使用できますHttpUtility.ParseQueryString()

string input = "username=bill&password=mypassword";
var col = HttpUtility.ParseQueryString(input);
string username = col["username"];
string password = col["password"];
于 2012-05-10T16:01:25.320 に答える
2

これに似たものが機能するはずだと思います

public Dictionary<string, string> SplitTheStrings(s) {
    var d = new Dictionary<string, string>();  
    var a = s.Split('&');
    foreach(string x in a) {
        var b = x.Split('=');
        d.Add(b[0], b[1]);
    }
    return d;
}
于 2012-05-10T16:00:28.910 に答える
1

キーが繰り返されない場合

var dict = s.Split('&').Select( i=>
{
    var t = i.Split('=');
    return  new {Key=t[0], Value=t[1]};}
).ToDictionary(i=>i.Key, i=>i.Value);

キーが繰り返せる場合

    string s = "username=bill&password=mypassword";
    var dict = s.Split('&').Select( i=>
    {
        var t = i.Split('=');
        return  new {Key=t[0], Value=t[1]};}
    ).ToLookup(i=>i.Key, i=>i.Value);
于 2012-05-10T16:18:40.713 に答える
1
        var splitString = "username=bill&password=pass";
        var splits = new char[2];
        splits[0] = '=';
        splits[1] = '&';
        var items = splitString.Split(splits);
        var list = new Dictionary<string, string> {{items[1], items[3]}};

        var username = list.First().Key;
        var password = list.First().Value;

これは私の仕事でもあります

于 2012-05-10T16:08:12.620 に答える
0

他の答えは、より良く、読みやすく、シンプルで、バグが発生しにくいなどですが、別の解決策は、次のような正規表現を使用してすべてのキーと値を抽出することです。

MatchCollection mc = Regex.Matches("username=bill&password=mypassword&","(.*?)=(.*?)&");

一致コレクションの各一致には、キー テキストのグループと値テキストのグループの 2 つのグループがあります。

私は正規表現があまり得意ではないので、入力文字列に末尾の「&」を追加せずに一致させる方法がわかりません...

于 2012-05-10T16:12:28.233 に答える