2012-05-10 3 views
2

Как разбить следующую строкурасщепление строки в словаре

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

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

так, чтобы я мог захватить его следующим образом:

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

Пожалуйста, дайте мне знать. Благодаря

ответ

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"]; 

Примечание: имейте в виду, что нет никакой проверки в этой функции , он предполагает, что ваша строка ввода правильно отформатирована.

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; 
} 
5

Похоже, что вы пытаетесь разобрать строку запроса - это уже построен, вы можете использовать HttpUtility.ParseQueryString() для этого:

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

хорошее решение, но не совсем, как словарь просил ;-) – musefan

+3

@musefan - И все же, вероятно, лучший способ, чтобы получить к DIC tionary. Сильно оформленный синтаксический анализ и результирующий набор, который может быть тривиально преобразован в один. – Oded

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; 

это мое работать

0

Другие ответы лучше, легче читать, проще, менее подвержены ошибкам и т. д., но альтернативным решением является использование регулярного выражения, подобного этому, для извлечения всех ключей и значений:

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

Каждое совпадение в коллекции совпадений будет иметь две группы, группу для текста ключа и группу для текста значения.

Я не слишком хорошо с регулярными выражениями, так что я не знаю, как получить его, чтобы соответствовать без добавления символа «&» на строку ввода ...

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); 
Смежные вопросы