基于模式的字符串解析
本文关键字:字符串 模式 于模式 | 更新日期: 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(',');