7

Jak porównać ciągi ze względu na wielkość liter i akcent niewrażliwyJak porównać ciągi ze względu na wielkość liter i akcent niewrażliwy

Dobrze jest to zrobić łatwo na serwerze SQL

Jednak chciałbym zrobić to samo w C#. NET 4.5.1.

Jak mogę to zrobić w najbardziej odpowiedni sposób?

mam na myśli te 3 struny powinna powrócić równa w porównaniu

http://www.buroteknik.com/metylan-c387c4b0ft-tarafli-bant-12cm-x25mt_154202.html 
http://www.buroteknik.com/METYLAN-C387C4B0FT-TARAFLI-BANT-12cm-x25mt_154202.html 
http://www.buroteknik.com/METYLAN-C387C4B0FT-TARAFLı-BANT-12cm-x25mt_154202.html 

muszę metodę, która powie ci 2 poniżej samego serwera SQL mówi, że są równe.

tarafli 
TARAFLİ 
+1

Spójrz na tej odpowiedzi http://stackoverflow.com/questions/359827/ignoring-accented-letters-in-string-comparison – p1va

Odpowiedz

11

Aby ignorować zarówno sprawę i akcenty, można użyć string.Compare() z obu IgnoreNonSpace i opcje IgnoreCase, tak:

string s1 = "http://www.buroteknik.com/metylan-c387c4b0ft-tarafli-bant-12cm-x25mt_154202.html"; 
string s2 = "http://www.buroteknik.com/METYLAN-C387C4B0FT-TARAFLI-BANT-12cm-x25mt_154202.html"; 
string s3 = "http://www.buroteknik.com/METYLAN-C387C4B0FT-TARAFLı-BANT-12cm-x25mt_154202.html"; 

Console.WriteLine(string.Compare(s1, s2, CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreCase)); 
Console.WriteLine(string.Compare(s2, s3, CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreCase)); 

W odpowiedzi na swój komentarz poniżej, to działa na tarafli i TARAFLİ też .

Poniższe drukuje kod 0, czyli ciągi są równe:

string s1 = "tarafli"; 
string s2 = "TARAFLİ"; 
Console.WriteLine(string.Compare(s1, s2, CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreCase)); 

I tu korzysta z kultury tureckiej (zgaduję, co jest poprawna kultura). Drukuje także 0:

string s1 = "tarafli"; 
string s2 = "TARAFLİ"; 

var trlocale = CultureInfo.GetCultureInfo("tr-TR"); 
Console.WriteLine(string.Compare(s1, s2, trlocale, CompareOptions.IgnoreNonSpace | CompareOptions.IgnoreCase)); 
+0

dzięki dla odpowiedzi, dlaczego potrzebujemy prądu? – MonsterMMORPG

+0

ok ta metoda nie powiodła się dla tych 2 ciągów: tarafli - TARAFLİ jednak serwer SQL mówi tak samo, jak powinno być – MonsterMMORPG

+0

@MonsterMMORPG Z jakich ustawień pochodzą te ciągi? –

3

Można użyć string.Compare z przeciążeniem, który przybiera właściwą CultureInfo i CompareOptions:

string.Compare(s1, s2, CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace | 
                CompareOptions.IgnoreCase); 

Edit:

Co do Twojego pytania o CultureInfo od MSDN:

Porównanie wykorzystuje parametr kultury do uzyskania specyficznych dla danej kultury informacji: , takich jak reguły dotyczące klatek i kolejność alfabetyczna pojedynczych znaków . Na przykład, konkretna kultura może określać , że niektóre kombinacje znaków traktować jako pojedynczy znak , że wielkie i małe litery będą porównywane w szczególny sposób, lub że kolejność sortowania znaku zależy od znaków poprzedzających znak . lub wykonaj to.

+0

dzięki za odpowiedź dlaczego czy potrzebujemy prądu? – MonsterMMORPG

+1

Ponieważ chcesz być zgodny z kulturą, użytkownik uruchamia się na swoim komputerze. Zobacz moją edycję. –

+0

dzięki za odpowiedź jeszcze raz możemy powiedzieć, że serwer MS SQL również używa tych informacji, gdy ustawiam niezmienną kulturę i przypadek niezmienniczy? – MonsterMMORPG

Powiązane problemy