首页 > 解决方案 > 有什么更优雅的方式来检查和分配字符串排列?

问题描述

用例:我想检查一个字符串末尾是否有空格,如果有,则用除空格外的相同字符串替换该字符串,并写一个日志。我的第一直觉告诉我

if(someString.Trim() != someString)
{
    someString= someString.Trim();
    Log("whitespaces trimmed");
}

将是这样做的一种方式。但是,在这种情况下,我修剪了两次字符串,这对我来说似乎没有必要。

所以我想到了

 var trimString = someString.Trim();
 if (trimString != someString) 
 {
    someString = trimString;
    Log("whitespaces trimmed");
 }

然而,这引入了一个基本无用的变量。稍后它可能会被 gc'ed,但在我看来它仍然很丑陋。所以,我想到了使用,嗯,“使用”,但编译器很快提醒我字符串没有实现 IDisposable。

所以,我的问题是:有没有更优雅的方式来编写这些场景?

标签: c#string

解决方案


我个人会选择EndsWith

if (someString.EndsWith(" "))
{
    someString = someString.Trim();
    Log("whitespaces trimmed");
}

这将检查字符串的最后一个字符是否为空格(因此需要修剪)。然后,也只有这样,字符串本身的结尾才真正被修剪。

节省了两次修剪的开销。

经过一段时间的思考后编辑

我对此进行了进一步的思考。OP特别提到了空格,而不仅仅是空格。

下面是一些检查字符串最后一个字符的空格的代码:

if (char.IsWhiteSpace(someString[someString.Length - 1]))
{
    someString = someString.Trim();
    Log("whitespaces trimmed");
}

Trim当可能不需要时,这再次节省了额外的开销。


推荐阅读