基于模式的字符串解析

时间:2011-07-22 16:09:28

标签: c# .net string parsing

当我需要通过用逗号连接来对某些值进行字符串化时,我会这样做,例如:

string.Format("{0},{1},{3}", item.Id, item.Name, item.Count);

例如,"12,Apple,20" 然后我想做相反的操作,从给定的字符串中获取值。类似的东西:

parseFromString(str, out item.Id, out item.Name, out item.Count);

我知道,在C中是可能的。但我不知道C#中的这种功能。

4 个答案:

答案 0 :(得分:19)

是的,这很容易。您只需使用String.Split method在每个逗号上拆分字符串。

例如:

string myString = "12,Apple,20";
string[] subStrings = myString.Split(',');

foreach (string str in subStrings)
{
    Console.WriteLine(str);
}

答案 1 :(得分:7)

可能的实施方式将使用String.SplitRegex.Match

例如

public void parseFromString(string input, out int id, out string name, out int count)
{
    var split = input.Split(',');
    if(split.length == 3) // perhaps more validation here
    {
        id = int.Parse(split[0]);
        name = split[1];
        count = int.Parse(split[2]);     
    }
}

public void parseFromString(string input, out int id, out string name, out int count)
{
    var r = new Regex(@"(\d+),(\w+),(\d+)", RegexOptions.IgnoreCase);
    var match = r.Match(input);
    if(match.Success)
    {
        id = int.Parse(match.Groups[1].Value);
        name = match.Groups[2].Value;
        count = int.Parse(match.Groups[3].Value);     
    }
}

编辑:最后,SO在C#中有一堆关于scanf实现的线程 Looking for C# equivalent of scanf
how do I do sscanf in c#

答案 2 :(得分:3)

如果您可以采用字符串格式,尤其是item.Name不包含,

void parseFromString(string str, out int id, out string name, out int count)
{
    string[] parts = str.split(',');
    id = int.Parse(parts[0]);
    name = parts[1];
    count = int.Parse(parts[2]);
}

这只会做你想要的,但我建议你添加一些错误检查。最好还是考虑序列化/反序列化为XML或JSON。

答案 3 :(得分:2)

使用分割功能

var result = "12,Apple,20".Split(',');