2013-08-22 32 views
15

Giả sử tôi có 2 chuỗi. Chuỗi đầu tiên là x = "abc" và chữ thứ hai là y = "ABC" .Khi tôi viết bằng mã C# sau:cách tốt nhất để so sánh hai chuỗi và ký hiệu chữ hoa và chữ thường của chúng

if(x == y) 

hoặc

if(x.Equals(y)) 

giá trị trả về là true.How tôi có thể kiểm tra trường hợp trên và dưới của họ?

+0

Dưới đây là một số thông tin thêm về vấn đề này: http://stackoverflow.com/questions/444798/case-insensitive-containsstring – Niklas

+1

Bạn có nghĩa là nếu 'x = "abc"' và 'y = "ABC" ', sau đó' (x == y) 'sẽ trả về ** false ** ?? –

+0

yes.I muốn kiểm tra độ nhạy của chữ hoa chữ thường. – daidai

Trả lời

0

Hãy thử:

trường hợp nhạy cảm:

String.Equals (a,b) 

case insensitive

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

Giá trị trả về là khôngtrue nhưng false kể từ NET là trường hợp nhạy cảm theo mặc định.

Từ String.Equals:

Phương pháp này thực hiện một thứ tự (case-sensitive và văn hóa-insensitive) so sánh.

Đối == điều này cũng đúng kể từ String.Equality operator cuộc gọi Equals:

Toán tử này được thực hiện bằng cách sử dụng Equals phương pháp, có nghĩa là comparands được kiểm tra cho một sự kết hợp của tài liệu tham khảo và giá trị so bình đẳng . Toán tử này thực hiện một so sánh thứ tự .

này sẽ so sánh trường hợp insensitively:

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

Nếu bạn chỉ muốn biết nếu một nhân vật là trên hoặc thấp hơn trường hợp bạn có thể sử dụng các phương pháp:

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

Như Pleun viết hoặc bạn có thể

StringComparer.CurrentCultureIgnoreCase.Equals(a, b) 

Lưu ý rằng chúng tôi đang sử dụng phương thức đặt hàng CurrentCulture.Đôi khi bạn sẽ phải sử dụng phương pháp đặt hàng khác nhau (mỗi ngôn ngữ ra lệnh cho các chữ cái theo một cách khác)

Nếu bạn chắc chắn rằng bạn đang chỉ ra lệnh cho các ký tự ASCII sau đó

StringComparer.OrdinalIgnoreCase.Equals(a, b) 

là nhanh hơn một chút (hoặc trong các phương pháp chung, nơi bạn có thể chọn OrdinalIgnoreCase)

Nói chung chuyển đổi ToUpper() hoặc ToLower() hai chuỗi để so sánh chúng được sai (và chậm, bởi vì bạn phải chuyển đổi chúng hoàn toàn trước khi so sánh chúng, trong khi có lẽ họ là khác nhau trong ký tự đầu tiên) ... sai vì trong Thổ Nhĩ Kỳ có bốn i

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

4

Trước tiên, bạn nên quyết định xem bạn so sánh chuỗi trong culture dependent hoặc độc lập cách (ví dụ trong văn bản tiếng Nga chữ "E" và "Ё" thường coi như là như nhau; Phần Lan có xu hướng đối xử với "V" và "W" giống nhau). Tiếp theo, bạn nên chọn sử dụng hay không sử dụng trường hợp ("a" v. "A"). Vì vậy, đang có 6 so sánh có thể:

TT (văn hóa độc lập) so sánh:

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

so sánh văn hóa hiện tại:

// 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); 

so sánh văn hóa Explicit:

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

so sánh phương thức trả về c như int. không bool một nếu tuyên bố nên trông giống như dưới đây: nếu (culture.CompareInfo.Compare (PaymentReq.IslemTipi, "ödeme", CompareOptions.IgnoreCase) == 0) –

1

này một tùy chọn khác bạn có thể thử.

if(string.Compare("a", "A", true) == 0) 
Các vấn đề liên quan