我想比较c#中的两个字符串,如果一个字符串有任何特殊字符,那么它应该被忽略.如果 - 如果 -
string a1= "he is a good guy"; string a2="h2$#%# is a good guy";
之后string.ReferenceEquals(a1,a2)
应该返回True吗?
我怎样才能做到这一点?
首先,ReferenceEquals
这里并不好,因为它比较了参考,而不是价值.因此,如果您比较两个不同的变量,您的代码将始终为false(并且字符串将不会被实现,但它是一个不同的故事).
要比较字符串,请使用string.Equals
方法.但首先,你必须摆脱特殊字符,在Regex的帮助下可以实现:
string a2 = "h2$#%# is a good guy"; string a3 = Regex.Replace(a1, @"[^\w\d\s]", "");
这告诉你要用空字符串替换不是(^
)单词字符(\w
),数字(\d
)或空格(\s
)的所有内容.
使用它,您的解决方案应如下所示:
string.Equals(Regex.Replace(a1, @"[^\w\d\s]", ""), Regex.Replace(a2, @"[^\w\d\s]", ""));
要不重复正则表达式代码,您可以为字符串编写辅助扩展方法:
public static class StringExtensions { public static string RemoveSpecialCharacters(this string str) { return Regex.Replace(str, @"[^\w\d\s]", ""); } }
你的代码将是:
string.Equals(a1.RemoveSpecialCharacters(), a2.RemoveSpecialCharacters());