以下是代码:
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,结果是一样的。是否有任何解释导致这种行为的原因?
答案 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);
}