首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不调用string.Trim()的情况下忽略前缀和后缀来比较字符串

问如何在不调用string.Trim()的情况下忽略前缀和后缀来比较字符串
EN

Stack Overflow用户
提问于 2012-07-19 14:25:27
回答 4查看 2K关注 0票数 0

可能重复: String.comparison performance (with trim)

我想编写一个函数来判断两个字符串是否相等,方法是忽略第一个字符串的whiteSpace前缀和后缀,而不调用string.Trim()。也请考虑不敏感的情况。

假设:

代码语言:javascript
复制
string str1 = "   Abc   ";
string str2 = "abc";

bool trueEqual = IsEqualWithoutWhiteSpace(str1, str2, /*ignore case?*/ true);  // return true.
EN

回答 4

Stack Overflow用户

发布于 2012-07-19 14:33:10

我假设您想这样做是出于性能原因(在某些情况下,这是一个有效的原因--我将避免通常的过早优化警告)。

首先,在开头和结尾计算字符串中空格字符的数量。如果非空白部分的长度不相同,则返回false。现在我们知道它的长度是一样的。

接下来,使用适当的start和count参数调用stringA.IndexOf(stringB, ...),以确定是否找到匹配项。如果有匹配,则字符串根据实现是相等的。

如果不需要区分大小写,也可以使用循环来比较两个字符串的中间部分。

票数 1
EN

Stack Overflow用户

发布于 2012-07-19 14:32:51

就像评论显示的,没有直接的理由不使用trim。因此,如果你确信修剪是好的,这里有一个解决方案,如何做到这一点。

代码语言:javascript
复制
public static bool IsEqualWithoutWhiteSpace(this string aLhs, string aRhs)
{
    var left = aLhs.Trim();
    var right = aRhs.Trim();
    return left.Equals(right, StringComparison.OrdinalIgnoreCase);
}

string str1 = "   Abc   ";
string str2 = "abc";

var b = str1.IsEqualWithoutWhiteSpace(str2);

如果这是性能原因,请重新考虑您的问题,因为您是在问“有人能为我编写函数吗?”而不是“有人能解释为什么我的代码不能工作”。

票数 0
EN

Stack Overflow用户

发布于 2012-07-19 14:37:48

听着,妈,没有Trim()!

代码语言:javascript
复制
        string str1 = "      AbC   ";
        string str2 = "abc";

        var r = new Regex("^[ \t]+|[ \t]+$");
        var trimStr1 = r.Replace(str1, "");
        var trimStr2 = r.Replace(str2, "");

        return trimStr1.Equals(str2, StringComparison.OrdinalIgnoreCase);

虽然,就像其他人说的那样,我肯定会在我自己的一个项目中使用Trim()。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11562965

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档