在 C# 中从字符串开头修剪所有可能的空白字符和自定义字符的最佳方法是什么?

问题描述 投票:0回答:2

在 C# 中,我想 Trim() 所有可能类型的空白字符(由 .IsWhitespace 定义)的字符串的两端,加上修剪字符串的开头以同时从 char[ 中的自定义列表中删除任何字符] 数组,出现在常规字母数字字符之前。所以字符串应该结束,第一个字符不是任何空格,也不是我的自定义列表中的字符之一。 (但是,在第一个字符之后,字符串当然可能包含空格或列表中的字符。)

我只想遍历字符串一次来完成所有这些,因为要修剪的字符串列表很大。

以下内容不起作用(请参阅代码片段下方的更多评论)。

    static class TrimmerExtension
    {
        private const string _prefixCharsToTrimAsString = "~`$|-_";
        private static readonly char[] _prefixCharsToTrim;

        // static ctor
        static TrimmerExtension()
        {
            _prefixCharsToTrim = _prefixCharsToTrimAsString.ToCharArray();
        }

        public static string TrimWhitespaceAndPrefixes(this string s)
        {
            return s.Trim().TrimStart(_prefixCharsToTrim).TrimStart();
        }
    }

以上都不行,因为:

  1. 它多次调用不同版本的 Trim,从而多次遍历字符串。 (所以上面是低效的);

  2. 如果其他要修剪的字符之间有空白字符,则不会从头开始完全修剪所有空格和特殊字符;例如,如果字符串包含“$ ~ Something”,扩展方法将返回“~ Something”,但仍需要删除前两个字符。 (所以上面的代码是不正确的。)

C# 或 .NET 是否提供了执行此操作的有效方法(在性能和源代码简单性方面)?或者,是否有一个类或库定义了 Trim() 函数将从字符串中删除的所有可能空白字符的常量字符(或字符串)数组,因此我可以将它添加到我的特殊前缀字符列表中删除?

如果此特定问题已得到解答,请发布问题和答案的链接。

谢谢。

c# .net string trim
2个回答
0
投票

为什么不用手做呢?

public static string MySpecialTrim(string str, char[] trimChars)
{
    for (var i = 0; i < str.Length; ++i)
    {
        char ch = str[i];
        if (!char.IsWhiteSpace(ch) && !trimChars.Contains(ch))              
            return str.Substring(i);
    }
    return str;
}

这样你就可以控制哪些字符被修剪了。


0
投票
  • 你可以使用
    TrimStart()
    .
  • 它将从当前字符串中删除所有前导空白字符。
  • 您还可以传递要从字符串开头删除的字符数组。
  • 例如,您想从字符串的前导中删除空格 $ 和百分比,您可以按照以下步骤进行操作?
string input = "$%Hello World";

char[] trimChars = {' ', '$', '%'};

string output = input.TrimStart(trimChars);

Console.WriteLine(output); // Output: "Hello World"
  • 要从字符串末尾删除,您可以使用

    TrimEnd()
    .

  • 有关 TrimStartTrimEnd 的更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.