基于模式的字符串解析

Ser*_*lov 10 .net c# string parsing

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

string.Format("{0},{1},{3}", item.Id, item.Name, item.Count);
Run Code Online (Sandbox Code Playgroud)

例如,有"12,Apple,20".
然后我想做相反的操作,从给定的字符串中获取值.就像是:

parseFromString(str, out item.Id, out item.Name, out item.Count);
Run Code Online (Sandbox Code Playgroud)

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

Cod*_*ray 19

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

例如:

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

foreach (string str in subStrings)
{
    Console.WriteLine(str);
}
Run Code Online (Sandbox Code Playgroud)


Jam*_*iec 9

可能的实现将使用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]);     
    }
}
Run Code Online (Sandbox Code Playgroud)

要么

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);     
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:最后,SO在C#中的scanf实现上有一堆线程
寻找C#等效的scanf
如何在c#中执行sscanf