我需要做很多高性能的不区分大小写的字符串比较,并意识到我这样做.ToLower().Trim()真的很愚蠢,因为所有的新字符串都被分配了
所以我挖了一点,这种方式似乎更可取:
String.Compare(txt1,txt2, StringComparison.OrdinalIgnoreCase)
Run Code Online (Sandbox Code Playgroud)
这里唯一的问题是我想忽略前导或尾随空格,即Trim(),但如果我使用Trim,我对字符串分配也有同样的问题.我想我可以检查每个字符串,看看它是StartsWith("")还是EndsWith("")然后才修剪.要么指出索引,要么计算每个字符串的长度并传递给string.Compare覆盖
public static int Compare
(
string strA,
int indexA,
string strB,
int indexB,
int length,
StringComparison comparisonType
)
Run Code Online (Sandbox Code Playgroud)
但是这看起来相当混乱我可能不得不使用一些整数,如果我没有为两个字符串上的尾随和前导空白的每个组合制作一个非常大的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) …Run Code Online (Sandbox Code Playgroud) 我需要比较两个字符串忽略空格和换行符,所以以下字符串应该相等:
"Initial directory structure.\r\n \r\n The directory tree has been changed"
"Initial directory structure.\n\nThe directory tree has been changed"
Run Code Online (Sandbox Code Playgroud)
有人知道如何实现它?提前致谢.