基于 C# 中的两个分隔符拆分字符串

本文关键字:两个 分隔符 拆分 字符串 基于 | 更新日期: 2023-09-27 18:36:05

问题 - 我有一个文件(info.ref),其中包含特定格式的信息(引用ID|电子邮件地址),例如:

ref1|a@a.com,b@b.com,c@c.com   
ref2|c@c.com,d@d.com

我还从另一个文件(比如 ref1)获取引用 id。我需要遍历此文件,然后想将电子邮件发送到与此引用 ID 关联的所有电子邮件 ID。

我试过了——

 using (var streamReader = new StreamReader("info.ref"))
                            {
                                string line1="";
                                while((line1 = streamReader.ReadLine()) != null)
                                {
                                    var parameters =
                                       from line11 in line1
                                       let split = line1.Split('|')
                                       select new { name = split.First(), value = split.Skip(1) };
                                   //email logic to be written

                                }

问题-如何从此"参数"获取电子邮件列表。

注意-我知道我可以用"|"作为分隔符拆分字符串,然后再次用","作为分隔符拆分并存储在数组中。但是有人可以指导我编写的代码有什么问题以及如何检索电子邮件地址吗?以及哪种方法更好?

提前谢谢。

基于 C# 中的两个分隔符拆分字符串

您也可以

通过多个分隔符进行拆分(假设 ref cannont 包含,个字符)):

var emails = line1.Split('|', ',').Skip(1); //skipping ref

或:

var splitted = line1.Split('|', ',');
var paramerers = 
       new 
       {
           name = splitted.FirstOrDefault(), //for case of empty line
           value = spliited.Skip(1)
       };
//usage
var emails = parameters.value.ToArray(); // f.e.

您尚未按逗号拆分电子邮件,并且不需要循环中的 LINQ 查询:

string[] tokens = line1.Split('|');
if(tokens.Length >= 2)
{
    string name = tokens[0];
    string[] emails = tokens[1].Split(',');
}

如果您正在学习 LINQ,则可以使用以下查询File.ReadLines

var allInfos = from line in System.IO.File.ReadLines("info.ref")
               let tokens = line.Split('|')
               where tokens.Length >=  2
               select new { name = tokens[0], emails = tokens[1].Split(',') };
foreach(var info in allInfos)
    Console.WriteLine("Name:{0} Emails{1}", info.name, String.Join(",", info.emails));