C# 是否可以为string.Trim()添加字符(而不是替换默认值)?
我想按默认的空白字符和其他字符进行修剪。我是这样做的:C# 是否可以为string.Trim()添加字符(而不是替换默认值)?,c#,.net,trim,C#,.net,Trim,我想按默认的空白字符和其他字符进行修剪。我是这样做的: string MyTrim(string source) { char[] badChars = { '!', '?', '#' }; var result = source.Trim().Trim(badChars); return result == source ? result : MyTrim(result); } 对我来说,它看起来很愚蠢,因为它的迭代次数比它需要的要
string MyTrim(string source)
{
char[] badChars = { '!', '?', '#' };
var result = source.Trim().Trim(badChars);
return result == source
? result
: MyTrim(result);
}
对我来说,它看起来很愚蠢,因为它的迭代次数比它需要的要多。是否可以为string.Trim()添加字符(而不是替换默认值)?或者在哪里可以找到默认情况下在string.Trim()中使用的“默认空白字符”数组?这听起来很简单,但我找不到。无法更改
Trim
的默认行为
但是,如果必须,您可以创建一个包含所有要修剪的字符的数组,以便将调用减少到仅一个调用,但它是这样的:
var badChars =
(from codepoint in Enumerable.Range(0, 65536)
let ch = (char)codepoint
where char.IsWhiteSpace(ch)
|| ch == '!' || ch == '?' || ch == '#'
select ch).ToArray();
这将给您一个调用Trim
:
var result = source.Trim(badChars);
理想情况下,您可以将坏蛋存储在某个地方,这样您就不必一直构建它
现在,这会比两个电话快吗?我不知道,但如果有必要,我会测量它。不可能直接添加其他字符
但是,已定义空白字符列表,您可以从提供的所有枚举创建静态帮助器列表
除非您正在解析大量字符串,否则可能不值得在字符串上保存第二次传递。。另请参见@CodeCaster,我认为您没有抓住要点,OP希望避免使用多个Trim
调用。@Habib我回答的是“在哪里可以找到“默认空白字符”数组?”为什么要递归调用MyTrim
?看起来你在担心额外的Trim
调用,但是你自己的代码会让事情变得更糟。你可以使用两个正则表达式:“@\A[\s!#?]*”
作为开始,而@“[\s!#?]*\Z”
作为结束,OP可以迭代输入字符串源代码来查找空白字符,然后删除它们,而不是0到65536。虽然性能差异可以忽略不计,但对于过早优化的额外警告是值得欢迎的。虽然Trim().Trim(additionalChars)
可能会“循环愚蠢”(OP的话),但在某些代码库中查找此代码会显得更愚蠢,并且肯定会使“每分钟wtfs”飙升。除非你每秒修剪数千个字符串,否则你不会注意到差异,在这种情况下可读性更重要。啊,问题中的代码是递归的,好吗。然后我不太确定我会推荐什么。@LasseV.Karlsen这不仅仅是两个电话,例如“a!!!!!!!”-15。这并不是真正的性能问题,只是试图为@CodeCaster抱歉,…寻找简单的.Net可能性,以便在没有新逻辑实现的情况下使用附加字符进行调用修剪。