C#中去除字符串开头特殊字符的最快方法

4
我正在使用C#,并且我有一个字符串,内容如下:


-Xyz
--Xyz
---Xyz
-Xyz-Abc
--Xyz-Abc

我只想删除任何前导特殊字符,直到出现字母,注意:字符串中间的特殊字符将保持不变。最快的方法是什么?
2个回答

9
您可以使用 string.TrimStart 函数并传入想要移除的字符:
var result = yourString.TrimStart('-', '_');

然而,只有在您想要移除的特殊字符数量已知且较少时,这才是一个好主意。
如果不是这种情况,您可以使用正则表达式:

var result = Regex.Replace(yourString, "^[^A-Za-z0-9]*", "");

你确定这比 RemoveSubstring 更快吗? - Smartboy
@Smartboy,你确定这样做会有任何可衡量的性能优势吗?TrimStart易于阅读,方法的整体性能(在机器上运行时以及被开发人员理解和阅读时)可能是最好的。 - Th 00 mÄ s
2
@Smartboy:这是最易懂且最快速的编写方式。如果在执行时它是最快的方式,那只有通过一些分析才能得出结论。然而,请仅在经编译器验证为真实性能问题的情况下进行优化。如果您只是认为这是一个性能问题,那很可能并非如此。 - Daniel Hilgarth
@Joey:嗯...是的。现在这很尴尬,我不知道怎么会漏掉这个。 - Daniel Hilgarth

0

我更喜欢这两种方法:

List<string> strings = new List<string>()
{
    "-Xyz",
    "--Xyz",
    "---Xyz",
    "-Xyz-Abc",
    "--Xyz-Abc"
};

foreach (var s in strings)
{
    string temp;

    // String.Trim Method
    char[] charsToTrim = { '*', ' ', '\'', '-', '_' }; // Add more
    temp = s.TrimStart(charsToTrim);
    Console.WriteLine(temp);

    // Enumerable.SkipWhile Method
    // Char.IsPunctuation Method (se also Char.IsLetter, Char.IsLetterOrDigit, etc.)
    temp = new String(s.SkipWhile(x => Char.IsPunctuation(x)).ToArray());
    Console.WriteLine(temp);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接