【问题标题】:How to remove comma characters from a semicolon delimited List<string>?如何从分号分隔的 List<string> 中删除逗号字符?
【发布时间】:2016-11-20 22:55:56
【问题描述】:

我创建了一个用分号分隔的电子邮件列表,以便安全处理。

但是查看日志,有一种情况是用户在每封电子邮件后输入逗号“,”字符,从而导致An invalid character was found in the mail header: ',' 错误。

我确实查看了关于从列表中删除字符的其他答案,并使用 Linq 尝试了以下操作:

//Remove any invalid commas from the recipients list
recipients = string.Join(" ", recipients .Split().Where(w => !recipients.Contains(",")));

但是编译器告诉我List&lt;string&gt; 不包含.Split() 的定义,在当前上下文中不存在。重要的是,处理后的列表仍然由“;”分隔。逗号后的分号被删除。

问题:

如何从分号分隔的列表中删除逗号字符?

代码:

List<string> recipients = new List<string>();

//Split the additional email string to List<string> 
// (check that the string isn't empty before splitting)
if(string.IsNullOrEmpty(adContacts.AdditionalEmails) != true)
{ recipients = adContacts.AdditionalEmails.Split(';').ToList(); }


//Remove any invalid commas from the recipients list
recipients = string.Join(" ", text.Split().Where(w => !recipients.Contains(",")));

【问题讨论】:

  • text = text.Replace(",", "");?要删除所有逗号?
  • 你确定只是用分号替换逗号?还是我错过了重点
  • 回看代码,我的adContacts.AdditionalEmails字符串已经被分号分隔了,所以只需要去掉逗号:adContacts.AdditionalEmails.Replace(",", ""); recipients = adContacts.AdditionalEmails.Split(';').ToList();

标签: c# linq list character delimiter


【解决方案1】:

编译器错误是因为收件人是一个列表而不是字符串,并且列表没有拆分方法。

所以使用 List.RemoveAll 方法:

// Remove any invalid commas from the recipients list.
recipients = string.Join(" ", recipients.RemoveAll(item => item.Contains(",")));

【讨论】:

  • 我敢打赌,OP 想替换逗号为分号而不是remove
【解决方案2】:

这取决于删除所有逗号是什么意思。 删除整个text中的逗号:

text = text.Replace(",", "");

你的情况是

 recipients = adContacts.AdditionalEmails
   .Replace(",", "")
   .Split(';')
   .ToList(); // <- do you really want to convert array into a list?

将命令转换成分号

text = text.Replace(',', ';');

删除所有包含逗号的电子邮件

recipients = string.Join(";", text
  .Split(';')
  .Where(w => !w.Contains(",")));

最后,您可以逗号作为有效分隔符以及分号:

var eMails = text.Split(new char[] {';', ','}, StringSplitOptions.RemoveEmptyEntries); 

【讨论】:

  • 我实际上应该从 adContacts.AdditionalEmails 字符串中删除。所以以下在我的情况下有效:adContacts.AdditionalEmails.Replace(",", ""); recipients = adContacts.AdditionalEmails.Split(';').ToList(); 首先删除所有逗号,然后用字符串中已经存在的分号分隔符分割。
  • @Brian J:请注意,Remove 不改变字符串,但返回一个新的(所以adContacts.AdditionalEmails.Replace(",", "");将创建一个新字符串,然后丢弃是)。 recipients = adContacts.AdditionalEmails.Replace(",", "").Split(';').ToList();
【解决方案3】:

你可以试试这个方法:

List<string> newRecipients = recipients
   .Select(r => String.Join(";", r.Split(',', ';')))
   .ToList(); 

这将通过可能的逗号和分号分隔符分隔每个收件人。然后它将通过使用正确的分号加入新的收件人来构建新的收件人。

【讨论】:

    【解决方案4】:

    我会用正则表达式拆分:

    Regex.Split(input, @"[\,\;]+").Where(s => !string.IsNullOrWhiteSpace(s))
    

    【讨论】:

      【解决方案5】:

      您可能想用分号替换所有逗号:

      recipients=recipients.Replace(",",";");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-02-12
        • 2010-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多