在字典中拆分字符串

时间:2012-05-10 15:55:28

标签: c#

如何拆分以下字符串

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

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

这样我可以按如下方式捕获它:

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

请告诉我。感谢

6 个答案:

答案 0 :(得分: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"];

注意:请记住,此函数没有验证,它假定您的输入字符串格式正确

答案 1 :(得分:5)

看起来您正在尝试解析查询字符串 - 这已经内置,您可以使用HttpUtility.ParseQueryString()

string input = "username=bill&password=mypassword";
var col = HttpUtility.ParseQueryString(input);
string username = col["username"];
string password = col["password"];

答案 2 :(得分: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;
}

答案 3 :(得分: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;

这也是我的工作

答案 4 :(得分: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);

如果Keys可以重复

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

答案 5 :(得分:0)

其他答案更好,更易于阅读,更简单,更不容易出现错误等,但另一种解决方案是使用这样的正则表达式来提取所有键和值:

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

匹配集合中的每个匹配都有两个组,一组用于关键文本,另一组用于值文本。

我不太擅长正则表达式,所以我不知道如何在不添加尾随'&amp;'的情况下使其匹配到输入字符串......