c# - 有什么更优雅的方式来检查和分配字符串排列?
问题描述
用例:我想检查一个字符串末尾是否有空格,如果有,则用除空格外的相同字符串替换该字符串,并写一个日志。我的第一直觉告诉我
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。
所以,我的问题是:有没有更优雅的方式来编写这些场景?
解决方案
我个人会选择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
当可能不需要时,这再次节省了额外的开销。
推荐阅读
- javascript - React Native 0.56:bundle 不生成 .meta 文件 - 它仍然需要吗?
- visual-studio - Visual Studio 2015 智能感知添加了不必要的命名空间前缀,然后告诉我它们是不必要的
- android - 使用 Retrofit2 上传图片(PATCH 请求)
- react-router-dom - styled-components:如何防止道具被发送到链接组件?
- python - python中带有正则表达式比较的字符串在python中失败
- dart - Flutter:TextFormField,改变文字
- angular - 从服务附加 DOM 事件处理程序
- c++ - 小项目上 abi:cxx11 的链接问题
- c++11 - 在使用它的同一语句中移动 unique_ptr
- html - 如何使用 Selenium 和 C# 查找网格元素以在其中插入数据?