2013-08-22 5 views
15

Załóżmy, że mam 2 ciągi. Pierwszy ciąg to x = "abc", a drugi to y = "ABC". Kiedy piszę w C# następującym kodzie:najlepszy sposób porównania dwóch łańcuchów znaków i ich wielkich i małych znaków

if(x == y) 

lub

if(x.Equals(y)) 

zwracana jest wartość true.How mogę sprawdzić swoje wielkie i małe litery?

+0

Oto kilka informacji na temat: http://stackoverflow.com/questions/444798/case-insensitive-containsstring – Niklas

+1

Czy to znaczy, jeśli 'x = "abc"' i 'y = "ABC" ', następnie' (x == y) 'powinno zwrócić ** false ** ?? –

+0

yes.I chcesz sprawdzić wielkość liter. – daidai

Odpowiedz

0

Spróbuj:

Case wrażliwe:

String.Equals (a,b) 

Case Insensitive

string.Equals(a, b, StringComparison.CurrentCultureIgnoreCase); 
23

Wartością zwracaną jest nietrue ale false od .NET jest wielkość liter domyślnie.

Z String.Equals:

Sposób ten przeprowadza porządkowej (rozróżniana i rozróżnia kultur) porównanie.

Na == samo jest ważne, ponieważ String.Equality operator połączeń Equals:

Operator ten jest realizowany za pomocą równa sposób, co oznacza, że ​​ comparands są testowane na połączenie odniesienia i wartością równości . Ten operator wykonuje porównanie porządkowe .

To będzie porównać sprawę insensitively:

bool equals = x.Equals(y , StringComparison.OrdinalIgnoreCase); 

Jeśli chcesz tylko wiedzieć, czy znak jest górna lub dolna przypadku można użyć następujących metod:

bool isUpperChar = Char.IsUpper("ABC"[0]); // yes 
bool isLowerChar = Char.IsLower("ABC"[0]); // no 
0

Jak pisał Pleun lub możesz

StringComparer.CurrentCultureIgnoreCase.Equals(a, b) 

Należy pamiętać, że używamy metody zamawiania CurrentCulture.Czasem trzeba użyć różnych metod zamawiania (każdy język porządkuje litery w inny sposób)

Jeżeli jesteś pewien, że jesteś tylko zamawianie znaków ASCII następnie

StringComparer.OrdinalIgnoreCase.Equals(a, b) 

jest trochę szybszy (lub w sposobach ogólnych, gdzie można wybrać OrdinalIgnoreCase)

Generalnie konwersji ToUpper() lub ToLower() dwa ciągi do ich porównania jest źle (i powolne, ponieważ trzeba przekształcić je w pełni przed porównując je, a może są różni się od pierwszego znaku) ... błędne, ponieważ w turecki istnieją cztery i

http://codeblog.jonskeet.uk/2009/11/02/omg-ponies-aka-humanity-epic-fail/

4

Po pierwsze, należy zdecydować, czy porównać ciągi w culture dependent lub niezależnego sposób (np w rosyjskiej kulturze litery "E" i "Ё" często traktują jako takie same; Fiński ma tendencję do traktowania "V" i "W" jako takich samych itp.). Następnie należy wybrać, czy użyć czy nie użyć przypadku ("a" v. "A"). Więc nie jesteś 6 możliwych porównań:

porządkowej (culture niezależne) porównań:

// Ignore case comparison 
Boolean equals = String.Equals(x, y, StringComparison.OrdinalIgnoreCase); 
// Case comparison 
Boolean equals = String.Equals(x, y, StringComparison.Ordinal); 

Aktualne porównań Kultura:

// Current culture, ignore case comparison 
Boolean equals = String.Equals(x, y, StringComparison.CurrentCulture); 
// Current culture, case comparison 
Boolean equals = String.Equals(x, y, StringComparison.CurrentCultureIgnoreCase); 

Explicit porównań Kultura:

CultureInfo culture = new CultureInfo("Ru-ru"); // <- Or whatever you want 

// Explicit culture, ignore case comparison 
Boolean equals = culture.CompareInfo.Compare(x, y, CompareOptions.IgnoreCase); 
// Explicit culture, case comparison 
Boolean equals = culture.CompareInfo.Compare(x, y, CompareOptions.None); 
+0

Porównaj metodę return c like int. nie bool i jeśli instrukcja powinna wyglądać jak poniżej: if (culture.CompareInfo.Compare (PaymentReq.IslemTipi, "ödeme", CompareOptions.IgnoreCase) == 0) –

1

to inną opcję, którą możesz wypróbować.

if(string.Compare("a", "A", true) == 0) 
Powiązane problemy