我需要做很多高性能的不区分大小写的字符串比较,并意识到我这样做的方式 .ToLower().Trim() 真的很愚蠢,因为所有新字符串都被分配了
所以我挖掘了一下,这种方式似乎更可取:
String.Compare(txt1,txt2, StringComparison.OrdinalIgnoreCase)
这里唯一的问题是我想忽略前导或尾随空格,即 Trim() 但如果我使用 Trim 我在字符串分配方面遇到同样的问题。我想我可以检查每个字符串,看看它是 StartsWith(" ") 还是 EndsWith(" "),然后才修剪。要么找出每个字符串的索引、长度并传递给字符串。比较覆盖
public static int Compare
(
string strA,
int indexA,
string strB,
int indexB,
int length,
StringComparison comparisonType
)
但这似乎相当混乱,如果我不为两个字符串上的尾随和前导空格的每个组合制作一个非常大的 if-else 语句,我可能不得不使用一些整数......所以有什么优雅的解决方案的想法吗?
这是我目前的建议:
public bool IsEqual(string a, string b)
{
return (string.Compare(a, b, StringComparison.OrdinalIgnoreCase) == 0);
}
public bool IsTrimEqual(string a, string b)
{
if (Math.Abs(a.Length- b.Length) > 2 ) // if length differs by more than 2, cant be equal
{
return false;
}
else if (IsEqual(a,b))
{
return true;
}
else
{
return (string.Compare(a.Trim(), b.Trim(), StringComparison.OrdinalIgnoreCase) == 0);
}
}