基于模式的字符串解析

本文关键字:字符串 模式 于模式 | 更新日期: 2023-09-27 18:03:16

当我需要用逗号将一些值串起来时,我会这样做,例如:

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#中有这样的函数

基于模式的字符串解析

是的,这很简单。您只需使用String.Split方法在每个逗号上分割字符串。

例如:

string myString = "12,Apple,20";
string[] subStrings = myString.Split(',');
foreach (string str in subStrings)
{
    Console.WriteLine(str);
}

可能的实现将使用String。拆分或正则表达式。匹配

的例子。

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实现的线程
寻找c#等效的scanf
如何在c#中设置sscanf

如果您可以假设字符串格式,特别是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。

使用Split函数

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