2013-12-06 7 views
-3

Я хочу, чтобы сравнить две строки в C#, если один является имея специальный символ, то он должен быть ignored.Like если-Как сравнить две строки и игнорируя специальный символ в C#

string a1= "he is a good guy"; 
string a2="h2$#%# is a good guy"; 

затем после string.ReferenceEquals(a1,a2) он должен Верно?

Как я могу это сделать?

+3

Вы что-нибудь читали о ['ReferenceEquals'] (http://msdn.microsoft.com/pl-pl/library/system.object.referencee Quals% 28v = vs.110% 29.aspx)? Извините, но ваш вопрос не имеет никакого смысла. – BartoszKP

+0

Попробуйте сначала удалить специальные хараки, а затем сравнить? – Kurubaran

+0

Каково ваше определение специального символа? 2 $ #% # - всего лишь некоторые символы, а не специальные для меня. У вас возникла проблема с кодировкой строки? – Peter

ответ

5

Прежде всего, 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()); 
0

Вы можете решить вашу проблему, используя регулярные выражения. Некоторые большие Ressources об этой теме можно найти на:

  1. Официальных страницах MSDN - http://msdn.microsoft.com/de-de/library/system.text.regularexpressions.regex(v=vs.110).aspx
  2. Dotnetperls - http://www.dotnetperls.com/regex-match
  3. Общее, язык независима регулярное выражение в Théorie - http://www.regular-expressions.info/dotnet.html

Edit:

Я не думаю, что ReferenceEquals - это то, что вы ищете, как должностное лицо msdn documentation указывается:

Определяет, являются ли указанные экземпляры объекта одним и тем же экземпляром.

Вы хотите сравнить содержимое строки так, чтобы взглянуть на регулярное выражение.

+0

Спасибо ... получил это ... – Vishal

0

Вы можете определить индивидуальный метод сравнения.

Например.

private string[] patternsToIgnore = new []{"#","$","%","2$"}; //expand it as you like; 

public static CustomCompare(this string s, string otherString){ 
    var v1 = s; 
    var v2 = otherString; 
    foreach (var p in patternsToIgnore){ 
     v1 = v1.Replace(p, String.Empty); 
     v2 = v2.Replace(p, String.Empty); 
    } 
    return v1 == v2; 
} 

Используйте его следующим образом:

string a1= "he is a good guy"; 
string a2= "h2$#%#w is a good guy"; 

if (a1.CustomCompare(a2)){ 
    //you should now get here 
} 
Смежные вопросы