Có thể xác định xem một chuỗi str1="ABCDEFGHIJKLMNOP"
có chứa mẫu chuỗi strptrn="gHi"
không? Tôi muốn biết nếu điều đó có thể xảy ra khi các nhân vật không phân biệt chữ hoa chữ thường. Nếu vậy, làm thế nào?Chuỗi chứa - bỏ qua trường hợp
Trả lời
Bạn có thể sử dụng
org.apache.commons.lang3.StringUtils.containsIgnoreCase(CharSequence str,
CharSequence searchStr);
Kiểm tra xem CharSequence có chứa tìm kiếm CharSequenc không e không phân biệt trường hợp , xử lý null. Phân biệt chữ hoa chữ thường được định nghĩa là String.equalsIgnoreCase (Chuỗi).
Một CharSequence rỗng sẽ trả về false.
Điều này sẽ tốt hơn regex là regex luôn đắt tiền về hiệu suất.
Đối doc chính thức, tham khảo: StringUtils.containsIgnoreCase
Cập nhật:
Nếu bạn nằm trong số những người
- không muốn sử dụng Apache commons thư viện
- don không muốn đi với các giải pháp dựa trên
regex/Pattern
tốn kém đắt tiền, - không muốn tạo đối tượng chuỗi bổ sung bằng cách sử dụng
toLowerCase
,
bạn có thể thực hiện tùy chỉnh của riêng bạn containsIgnoreCase
sử dụng java.lang.String.regionMatches
public boolean regionMatches(boolean ignoreCase,
int toffset,
String other,
int ooffset,
int len)
ignoreCase
: nếu đúng, bỏ qua trường hợp khi so sánh ký tự.
public static boolean containsIgnoreCase(String str, String searchStr) {
if(str == null || searchStr == null) return false;
final int length = searchStr.length();
if (length == 0)
return true;
for (int i = str.length() - length; i >= 0; i--) {
if (str.regionMatches(true, i, searchStr, 0, length))
return true;
}
return false;
}
Cảm ơn. Rất nhiều công cụ tốt đẹp khác trong đó, chẳng hạn như indexOfIgnoreCase ... – vikingsteve
Phương pháp đó giả định rằng độ dài của phần được kết hợp của haystack sẽ là cùng số đơn vị mã UTF-16 như chiều dài của kim. Vì vậy, nếu bạn đang tìm kiếm "ß" và chuỗi chứa "SS", nó sẽ không tìm thấy kết quả phù hợp, mặc dù hai chuỗi này giống nhau nếu bạn bỏ qua trường hợp (bằng tiếng Đức, và tất nhiên bạn phải thiết lập miền địa phương bất cứ khi nào làm điều này.) – Trejkaz
org.apache.commons.lang3.StringUtils gói này không có sẵn trong android –
Bạn có thể sử dụng java.util.regex.Pattern với cờ CASE_INSENSITIVE đối với trường hợp hợp nhạy cảm:
Pattern.compile(Pattern.quote(strptrn), Pattern.CASE_INSENSITIVE).matcher(str1).find();
hãy xem câu trả lời trước @SamStephens đã viết http://stackoverflow.com/a/6996550/372926: bạn phải chỉ định cả CASE_INSENSITIVE và UNICODE_CASE và bạn vẫn sẽ không nhận được các giá trị phù hợp, bởi vì trong khi Java sử dụng toàn bộ casemapping, nó chỉ sử dụng casefolding đơn giản. Đây là một vấn đề." – Vini
Nếu bạn sẽ không đi với regex:
"ABCDEFGHIJKLMNOP".toLowerCase().contains("gHi".toLowerCase())
Trong khi điều này có thể là một câu trả lời, tôi không nghĩ rằng đó là một giải pháp tốt trên lớn' String's –
Điều này không làm việc trong thế giới rộng của unicode - xem http://stackoverflow.com/a/6996550/ 372.926 – SamStephens
Giống như 'nếu (file.getName(). toLowerCase() \t \t \t \t \t \t Chứa (editText.getText(). toString(). toLowerCase()))' –
Hãy thử điều này
public static void main(String[] args)
{
String original = "ABCDEFGHIJKLMNOPQ";
String tobeChecked = "GHi";
System.out.println(containsString(original, tobeChecked, true));
System.out.println(containsString(original, tobeChecked, false));
}
public static boolean containsString(String original, String tobeChecked, boolean caseSensitive)
{
if (caseSensitive)
{
return original.contains(tobeChecked);
}
else
{
return original.toLowerCase().contains(tobeChecked.toLowerCase());
}
}
Chuyển true thành tham số thứ ba nếu bạn muốn giá trị được kiểm tra trong trường hợp nhạy cảm và chuyển sai nếu bạn muốn giá trị cần kiểm tra trong trường hợp không nhạy cảm. –
Một tối ưu hóa phiên bản Imran Tariq của
Pattern.compile(strptrn, Pattern.CASE_INSENSITIVE + Pattern.LITERAL).matcher(str1).find();
Pattern.quote (strptrn) luôn trả về "\ Q" + s + "\ E" thậm chí nếu có là không có gì để báo giá, concatination chiến lợi phẩm.
Bạn nên sử dụng bitwise | toán tử thay vì toán tử cộng. –
- 1. Bỏ qua trường hợp 'chứa' cho một chuỗi trong Java
- 2. javascript: bỏ qua độ nhạy trường hợp của các chuỗi
- 3. JavaScript Trường hợp bỏ qua Regex
- 4. Trong Java, làm cách nào để kiểm tra xem chuỗi có chứa chuỗi con (bỏ qua trường hợp) không?
- 5. Bỏ qua trường hợp với difflib.get_close_matches()
- 6. Bỏ qua trường hợp với __startswith
- 7. Regex: bỏ qua trường hợp nhạy cảm
- 8. Chuỗi LINQ chứa một trường hợp chuỗi không nhạy cảm
- 9. Scala: Bỏ qua trường lớp trường hợp cho bằng/hascode?
- 10. Cách đối sánh chuỗi con trong chuỗi bỏ qua trường hợp?
- 11. Chuỗi kết hợp có cụm từ thông dụng trong trường hợp bỏ qua
- 12. LINQ Toán tử riêng biệt, bỏ qua trường hợp?
- 13. bỏ qua trường hợp nhạy cảm trong regex.replace?
- 14. Độ nhạy trường hợp bỏ qua khi so sánh các chuỗi trong PHP
- 15. Làm cách nào để tạo một băm trong Ruby so sánh chuỗi, bỏ qua trường hợp?
- 16. Nhận vimdiff của gVim để bỏ qua trường hợp
- 17. Xóa bộ sưu tậpTất cả trường hợp bỏ qua?
- 18. Chỉ mục JavaScriptOf để bỏ qua Trường hợp
- 19. Trường hợp bỏ qua SQL trong nhóm theo? (oracle)
- 20. hibernate jpa criteriabuilder bỏ qua truy vấn trường hợp
- 21. Tùy chọn bỏ qua trường hợp bằng phương thức .contains?
- 22. Intersection của hai mảng string (bỏ qua trường hợp)
- 23. So sánh wstring với bỏ qua trường hợp
- 24. LINQ to XML: Bỏ qua trường hợp thuộc tính
- 25. Bỏ qua thứ tự trường trong DataContractSerializer
- 26. Các trường nối MySQL nhưng bỏ qua các trường rỗng
- 27. iPhone: tìm một chuỗi trong khác với trường hợp insensetive
- 28. Bỏ qua các trường rỗng trong Json.net
- 29. Trường xác thực & bỏ qua jQuery
- 30. Làm thế nào để tách một chuỗi trong khi bỏ qua trường hợp của dấu phân cách?
sử dụng toUpperCase() ?? – Ravi