当被要求修剪“PRN.NUL”时,为什么TrimStart会更多地修剪一个字符?

时间:2010-05-14 19:19:41

标签: c# .net

以下是代码:

namespace TrimTest
{
    class Program
    {
        static void Main(string[] args)
        {
            string ToTrim = "PRN.NUL";
            Console.WriteLine(ToTrim);
            string Trimmed = ToTrim.TrimStart("PRN.".ToCharArray());
            Console.WriteLine(Trimmed);
            ToTrim = "PRN.AUX";
            Console.WriteLine(ToTrim);
            Trimmed = ToTrim.TrimStart("PRN.".ToCharArray());
            Console.WriteLine(Trimmed);
            ToTrim = "AUX.NUL";
            Console.WriteLine(ToTrim);
            Trimmed = ToTrim.TrimStart("AUX.".ToCharArray());
            Console.WriteLine(Trimmed);
        }
    }
}

输出如下:

PRN.NUL

UL

PRN.AUX

AUX

AUX.NUL

NUL

正如您所看到的,TrimStart从NUL中取出了N.但即使以PRN开头,它也不会对其他字符串这样做。

我尝试使用.NET Framework 3.5和4.0,结果是一样的。是否有任何解释导致这种行为的原因?

3 个答案:

答案 0 :(得分:10)

String.TrimStart适用于角色级别。你正在做的是告诉它删除任何“P”,“R”,“N”或“。”。字符从一开始 - 因此点后面的前N也会被删除。

如果要从字符串的开头删除某个字符串,首先使用StartsWith确保它在那里,然后使用Substring来获取字符串的正确部分。

答案 1 :(得分:2)

试试这个:

string ToTrim = "PRN.NUL";
string Trimmed = ToTrim.TrimStart(".NRP".ToCharArray());
Console.WriteLine(Trimmed);

注意什么?

答案 2 :(得分:0)

@MattiVirkkunen的回答是正确的。但是,这是一个解决方案,使用此扩展方法而不是RemoveStart方法来获得所需的结果。

public static String RemoveStart(this string s, string text)
{
    return s.Substring(s.IndexOf(s) + text.Length, s.Length - text.Length);
}