C# 如何为没有分隔符的键值对解析字符串?
如何在C#中解析字符串以提取键-值对,而键和值之间没有任何分隔符 我有一根像这样的线C# 如何为没有分隔符的键值对解析字符串?,c#,.net,regex,parsing,string-search,C#,.net,Regex,Parsing,String Search,如何在C#中解析字符串以提取键-值对,而键和值之间没有任何分隔符 我有一根像这样的线 string str = "\nFIRSTNAMEJOHN\nLASTNAMESMITH\nADDRESS1590 GRACE STREET\nBIRTHDATE04201969" 在上拆分后\n我得到一组字符串,如下所示 string[] properties = ["FIRSTNAMEJOHN","LASTNAMESMITH", etc.] 我想循环这些字符串的分割数组,并从每个字符串中提取键值对,以便
string str = "\nFIRSTNAMEJOHN\nLASTNAMESMITH\nADDRESS1590 GRACE STREET\nBIRTHDATE04201969"
在上拆分后\n我得到一组字符串,如下所示
string[] properties = ["FIRSTNAMEJOHN","LASTNAMESMITH", etc.]
我想循环这些字符串的分割数组,并从每个字符串中提取键值对,以便填充对象的属性,例如
Person person = new Person()
{ FIRSTNAME = JOHN,
LASTNAME = SMITH,
etc...
}
最干净的方法是什么?谢谢 您可以创建一个具有这些属性的类,然后通过反射获取对象的属性(因此我们可以使用循环),拆分
\n
字符上的字符串,然后对于每个属性,对于每个设置,如果设置以属性名开头,则根据设置字符串的其余部分设置属性值
例如:
class User
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Address { get; set; }
public string BirthDate { get; set; }
public override string ToString()
{
return $"{FirstName} {LastName}, born on {BirthDate}, lives at: {Address}";
}
}
public class Program
{
static void Main(string[] args)
{
string str = "\nFIRSTNAMEJOHN\nLASTNAMESMITH\nADDRESS1590 GRACE STREET\nBIRTHDATE04201969";
var user = new User();
var properties = typeof(User).GetProperties();
var settings = str.Split('\n');
foreach (var property in properties)
{
foreach (var setting in settings)
{
if (setting.StartsWith(property.Name, StringComparison.OrdinalIgnoreCase))
{
property.SetValue(user, setting.Substring(property.Name.Length));
break;
}
}
}
Console.WriteLine(user);
GetKeyFromUser("\n\nDone! Press any key to exit...");
}
}
输出
您从哪些方面获取的数据导致数据没有delimeter?你确定没有一个不可打印的字符作为delimeter吗?你可以用一种非常简单的方式来完成。首先,我使用了字符串输入。我创建了一个名为FieldNames的公共枚举。为了获取字符串值,我创建了一个名为EnumStringValue的类,该类允许您为每个enum成员创建一个属性。最后,我创建了一个ParseString方法,它接受字符串输入。它像以前一样在“\n”上拆分,但在该方法中,它调用一个ParseLine方法,该方法接受拆分数组中的每个项。如果需要,我可以发送,这里没有足够的空间粘贴整个东西。