Прежде всего, ReferenceEquals
не хорошо здесь, как он сравнивает ссылки, а не ценности. Следовательно, ваш код будет всегда ложным, если вы сравните две разные переменные (и строка не будет интернирована, но это совсем другая история).
Чтобы сравнить строку, используйте метод string.Equals
. Но во-первых, вы должны избавиться от специальных символов, это будет возможно с помощью Regex:
string a2 = "h2$#%# is a good guy";
string a3 = Regex.Replace(a1, @"[^\w\d\s]", "");
Это говорит о том, что вы хотите, чтобы заменить все, что не (^
) слово символ (\w
), a цифра (\d
) или пробел (\s
) с пустой строкой.
Используя его, ваше решение должно выглядеть следующим образом:
string.Equals(Regex.Replace(a1, @"[^\w\d\s]", ""),
Regex.Replace(a2, @"[^\w\d\s]", ""));
Чтобы не повторять Regex код, вы можете написать метод расширения помощник для строки:
public static class StringExtensions
{
public static string RemoveSpecialCharacters(this string str)
{
return Regex.Replace(str, @"[^\w\d\s]", "");
}
}
и ваш код будет:
string.Equals(a1.RemoveSpecialCharacters(),
a2.RemoveSpecialCharacters());
Вы что-нибудь читали о ['ReferenceEquals'] (http://msdn.microsoft.com/pl-pl/library/system.object.referencee Quals% 28v = vs.110% 29.aspx)? Извините, но ваш вопрос не имеет никакого смысла. – BartoszKP
Попробуйте сначала удалить специальные хараки, а затем сравнить? – Kurubaran
Каково ваше определение специального символа? 2 $ #% # - всего лишь некоторые символы, а не специальные для меня. У вас возникла проблема с кодировкой строки? – Peter