我想编写一个函数来判断两个字符串是否相等,方法是忽略第一个字符串的whiteSpace前缀和后缀,而不调用string.Trim()。也请考虑不敏感的情况。
假设:
string str1 = " Abc ";
string str2 = "abc";
bool trueEqual = IsEqualWithoutWhiteSpace(str1, str2, /*ignore case?*/ true); // return true.发布于 2012-07-19 14:33:10
我假设您想这样做是出于性能原因(在某些情况下,这是一个有效的原因--我将避免通常的过早优化警告)。
首先,在开头和结尾计算字符串中空格字符的数量。如果非空白部分的长度不相同,则返回false。现在我们知道它的长度是一样的。
接下来,使用适当的start和count参数调用stringA.IndexOf(stringB, ...),以确定是否找到匹配项。如果有匹配,则字符串根据实现是相等的。
如果不需要区分大小写,也可以使用循环来比较两个字符串的中间部分。
发布于 2012-07-19 14:32:51
就像评论显示的,没有直接的理由不使用trim。因此,如果你确信修剪是好的,这里有一个解决方案,如何做到这一点。
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);如果这是性能原因,请重新考虑您的问题,因为您是在问“有人能为我编写函数吗?”而不是“有人能解释为什么我的代码不能工作”。
发布于 2012-07-19 14:37:48
听着,妈,没有Trim()!
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()。
https://stackoverflow.com/questions/11562965
复制相似问题