Theo tiêu đề, những gì thực hành cho các so sánh chuỗi để bạn sử dụng và tại sao?So sánh chuỗi - strA.ToLower() == strB.ToLower() hoặc strA.Equals (strB, StringComparisonType)?
Trả lời
Bạn chưa chỉ định nền tảng, nhưng tôi đoán .NET. Tôi mạnh mẽ khuyên bạn nên sử dụng dạng sau - vì các so sánh trường hợp không đơn giản như bạn mong đợi. (Nó cũng tránh tạo thêm chuỗi, nhưng đó là một vấn đề khác.)
Ví dụ: bạn muốn mã của mình làm gì khi được hiển thị bằng "thư" và "MAIL" khi chạy ở Thổ Nhĩ Kỳ? Nếu bạn sử dụng ToLower
, giá trị này sẽ trả về false và tương tự như vậy nếu bạn sử dụng CurrentCultureIgnoreCase
- nhưng nếu bạn sử dụng InvariantCultureIgnoreCase
thì nó sẽ trả về true. Bạn cần phải suy nghĩ về nguồn dữ liệu và những gì bạn đang cố gắng đạt được với nó.
Xem recommendations for using strings trong MSDN để biết thêm thông tin và hướng dẫn.
Ngoài bất cứ điều gì khác, tôi muốn nói rằng điều sau thể hiện ý định của bạn hiệu quả hơn. Bạn không thực sự quan tâm đến các giá trị chữ thường của chuỗi - bạn quan tâm đến bình đẳng trong một case-insensitive cách ... đó là chính xác những gì hình thức thứ hai thể hiện.
Tôi cảm thấy tốt hơn khi sử dụng cụm từ thứ hai so với phiên bản đầu tiên. Bởi vì, loại thứ hai sẽ được hỗ trợ ở tất cả các ngôn ngữ và sẽ thuận tiện hơn khi sử dụng.
Cuộc gọi Equals
quy mô tốt hơn, vì nó là một trong những hoạt động chuỗi thay vì ba.
Bạn có được hiệu suất tốt nhất cho trường hợp insensetive so sánh với các tùy chọn StringComparison.OrdinalIgnoreCase
. Tuy nhiên, vì nó không xem xét sự khác biệt về văn hóa nên nó có thể không phải lúc nào cũng đưa ra kết quả mà bạn muốn.
Nếu bạn muốn thay đổi trường hợp để so sánh, bạn nên sử dụng ToUpper
thay vì ToLower
. Một số chữ cái kỳ lạ không chuyển đổi đúng từ trên xuống dưới, nhưng chuyển đổi từ thấp hơn thành chữ hoa.
Trong hầu hết các trường hợp, hiệu suất là không quan trọng, vì vậy bạn nên sử dụng giải pháp thay thế có ý nghĩa nhất trong tình huống này.
Bạn chưa xác định ngôn ngữ mà bạn đang sử dụng, nhưng từ các nhà điều hành ==
nó trông giống như C#. Nếu bạn sử dụng VB, bạn nên xem xét toán tử =
không sử dụng opreator bình đẳng của lớp chuỗi, nhưng logic của VB để so sánh, điều này hơi khác một chút.
- 1. chuỗi so sánh phần
- 2. so sánh chuỗi bash
- 3. So sánh chuỗi PostgreSQL
- 4. So sánh số có nhanh hơn so sánh chuỗi không?
- 5. So sánh Mã định danh
- 6. So sánh và so sánh số nguyên chuỗi PHP Weird
- 7. So sánh chuỗi trong .Net: "+" so với "-"
- 8. chuỗi So sánh với JSTL
- 9. python: so sánh hai chuỗi
- 10. Complex "Chứa" chuỗi so sánh
- 11. So sánh UIColors hoặc CGColor hoặc CGColorSpace
- 12. Cách so sánh một chuỗi so với nhiều chuỗi khác
- 13. So sánh chuỗi: InvariantCultureIgnoreCase vs OrdinalIgnoreCase?
- 14. So sánh chuỗi lớn hơn trong Makefile
- 15. C++ so sánh hai chuỗi ký tự
- 16. Chuỗi so sánh: toán tử ==() vs Equals()
- 17. MATLAB: so sánh mảng ô của chuỗi
- 18. Giá GUID và so sánh đắt tiền như thế nào so với so sánh chuỗi
- 19. So sánh một chuỗi có chuỗi rỗng (Java)
- 20. So sánh Object Hoặc Chỉ cần ID
- 21. So sánh hai JObject hoặc JArray
- 22. Devexpress hoặc Telerik Điều khiển so sánh
- 23. So sánh với mặc định hoặc trống?
- 24. So sánh các chuỗi trong Java
- 25. Hiệu suất so sánh chuỗi trong C#
- 26. So sánh một phần của chuỗi
- 27. so sánh ngày ở định dạng Chuỗi
- 28. phương pháp DateTime.TryParseExact để so sánh chuỗi
- 29. bash, gạch ngang và so sánh chuỗi
- 30. Selenium IDE gotoIF chuỗi so sánh vchar
Bạn có thể giải thích ví dụ sâu sắc về "thư" và "MAIL" ở Thổ Nhĩ Kỳ không? Tại sao tôi nên mong đợi False trong trường hợp này? –
@ValentynVynogradskiy: Bởi vì khi bạn viết hoa 'mail' ở Thổ Nhĩ Kỳ (sử dụng văn hóa/ngôn ngữ Thổ Nhĩ Kỳ), bạn không nhận được' MAIL' ... 'I' được viết hoa khác nhau. –