C#String.Trim()不从MailMessage.Subject中删除字符

时间:2018-02-11 14:28:19

标签: c# trim mailmessage

我正在尝试从MailMessage对象的Subject属性中删除某些符号。我所经历的是它什么都不做。即使将Subject分配给字符串并进行修剪,最终的Subject仍然会包含符号。 (未在示例中显示)

MailMessage mailMessage = new MailMessage
{
    From = new MailAddress(mail.SenderEmailAddress),
    SubjectEncoding = System.Text.Encoding.UTF8,
    Subject = mail.Subject.Trim(new char[] {}), //symbol list, like ":", "~", ">"
    Body = mail.Body
};

String path = @"C:\Users\" + Environment.UserName + @"\Documents\EML\";

if (!Directory.Exists(path))
{
    Directory.CreateDirectory(path);
}

path = @"C:\Users\" + Environment.UserName + @"\Documents\EML\"
    + mailMessage.Subject + ".eml";

MessageBox.Show(path);

消息框只是为了查看此时是否删除了该符号,稍后会将path放入方法中。

  

邮件主题为RE: dog.Trim尝试删除:

     

MessageBox显示C:\Users\user\Documents\EML\RE: dog.eml

2 个答案:

答案 0 :(得分:4)

text = String.Join(String.Empty, text.Split(replacements)); 方法,根据official MSDN documentation,从当前字符串对象中删除数组中指定的一组字符的所有前导和尾随出现。如果要从字符串中删除指定字符列表中出现的所有字符,即使它们没有出现在字符串的开头或结尾,也可能需要使用其他方法。

给出以下示例字符串和以下替换:

text = new String
(
    (from c in text
    where !replacements.Contains(c)
    select c).ToArray()
);

您可以使用各种方法执行此操作。这是一个包含其中几个的列表:

1)使用String.SplitString.Join

text = new String(text.Where(c => !replacements.Contains(c)).ToArray());

2)使用LINQ

text = Regex.Replace(text, "[:~]", String.Empty);

或:

foreach (Char c in replacements)
    text = text.Replace(c.ToString(), String.Empty);

3)使用正则表达式

public static String RemoveChars(this String input, params Char[] chars)
{
    StringBuilder builder = new StringBuilder();

    for (Int32 i = 0; i < input.Length; ++i)
    {
        if (!chars.Contains(input[i]))
            builder.Append(input[i]);
    }

    return builder.ToString();
}

text = text.RemoveChars(replacements);

4)使用循环和String.Replace

awk

5)使用扩展方法

awk 'FNR==5{print;nextfile}' *.csv

最终输出始终相同:

  

这是邮件主题!

答案 1 :(得分:3)

来自MSDN:

  

String.Trim Method() - 从当前String对象中删除所有前导和尾随空白字符。

因此,Trim不会从字符串中间删除字符。评论者建议使用替换,但是没有签名可以使用您正在使用的字符数组。一个简单的方法是扩展方法。

    class Program
    {

        static void Main(string[] args)
        {
            string text = "This:is~a>test";
            string subject = text.ReplaceFromCollection(new char[] { ':', '~', '>'}); //symbol list, like ":", "~", ">"

            Console.WriteLine($"{text}\n{subject}");
            Console.ReadLine();
        }

    }

    static class Extensions
    {
        public static String ReplaceFromCollection(this string text, IEnumerable<char> characters)
        {
            foreach (var chr in characters)
            {
                text = text.Replace(chr.ToString(), String.Empty);
            }
            return text;
        }
    }

使用此字符串,字符串中与数组中的字符匹配的每个字符将逐个替换为空字符串。结果然后传回。

关于扩展方法的

More reading

相关问题