在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,从而多次迭代字符串。(所以上面是低效的);
1.如果要修剪的其他字符之间存在空格字符,则它不会从开始就完全修剪所有空格和特殊字符;例如,如果字符串包含“$ ~ Something”,则扩展方法将返回“~ Something”,但仍需要删除前两个字符。(以上代码不正确。)
C#或。NET提供了一种有效的方法来做到这一点(在性能和源代码简单性方面)?或者,是否有一个类或库定义了一个常量字符(或字符串)数组,其中包含Trim()函数将从字符串中删除的所有可能的空格字符,以便我可以将其添加到要删除的特殊前缀字符列表中?
如果这个特定的问题已经回答,请发布一个链接到问题和答案(S)。
谢谢。
3条答案
按热度按时间sqserrrh1#
看起来没有简单的方法,因为
string.Trim()
内部使用了两种不同的方法。用于空白的TrimWhiteSpaceHelper:
和TrimHelper用于自定义字符:
将它们组合起来可能看起来像这样:
如果性能不是很重要,我建议使用正则表达式或https://stackoverflow.com/a/76133168/2770274的简写版本
dvtswwa32#
为什么不用手呢?
这样您就可以控制哪些角色被修剪。
cczfrluj3#
TrimStart()
。TrimEnd()
。*有关TrimStart和TrimEnd的更多信息。