2013-05-17 30 views
7

xem xét:Bỏ qua trường hợp 'chứa' cho một chuỗi trong Java

public static void main(String[] args) { 

    String s = "AbcD"; 

    System.out.println(s.contains("ABCD")); 
    System.out.println(s.contains("AbcD")); 
} 

Output:

false 
true 

tôi cần kết quả là đúng trong cả hai trường hợp không phụ thuộc vào trường hợp. Có thể không?

+0

Xem http://stackoverflow.com/questions/14018478/string-contains-ignore-case – devnull

Trả lời

25

Bạn cần phải chuyển đổi cả chuỗi với trường hợp tương tự trước khi sử dụng contains

s.toLowerCase().contains("ABCD".toLowerCase()); 
+7

Điều này không nhất thiết phải hoạt động, vì sự hội tụ trường hợp là ngôn ngữ cụ thể. '" i ".toLowerCase(). chứa (" I ". toLowerCase())' có thể ví dụ: trả về false. – jarnbjo

+0

@jarnbjo Tôi đã thử nghiệm nó ở vị trí của tôi (trung đông), Mỹ và Anh nhưng điều đó không đúng. bạn có ý nghĩa gì? – David

+3

@David Bất kỳ ngôn ngữ nào có quy tắc trên/dưới sai lệch sẽ không hoạt động như mong đợi. Đối với tiếng Thổ Nhĩ Kỳ, '" I ". ToLowerCase();' sẽ ví dụ: trả về '" ı "' và không phải '" i "'. – jarnbjo

19

Bạn có thể sử dụng org.apache.commons.lang3.StringUtils.containsIgnoreCase(String, String)

StringUtils.containsIgnoreCase(s, "ABCD") trả về true

tài liệu Apache here

+1

Tôi nghĩ rằng điều này có câu trả lời tốt nhất trong số tất cả. Thuận tiện hơn nhiều. @ PSR, tôi nghĩ bạn nên đánh dấu điều này là câu trả lời nếu điều này thực sự hữu ích. –

3

Sử dụng "toLowerCase "trợ giúp:

System.out.println(s.toLowercase(Locale.US).contains("ABCD".toLowercase (Locale.US))); 

(tất nhiên bạn cũng có thể sử dụng thay vì toUppercase)

4

Bạn có thể sử dụng một khớp Pattern để thực hiện một trận đấu case-insensitive:

Pattern pattern = Pattern.compile(Pattern.quote(s), Pattern.CASE_INSENSITIVE); 
pattern.matcher("ABCD").find(); 
pattern.matcher("AbcD").find(); 
+2

Một chút không hiệu quả khi sử dụng RegEx cho điều này :) –

+0

@phloc Vấn đề sử dụng 'toLowerCase()' là kết quả phụ thuộc vào miền địa phương hiện tại. – zakinster

+0

Đó là lý do tại sao tôi đề xuất toLowercase (Locale.US) - hoặc bất kỳ ngôn ngữ nào bạn muốn. –

2

Bạn có thể làm điều này với toLowerCase. Một cái gì đó như thế này:

s.toLowerCase().contains("aBcd".toLowerCase()); 
1

Hãy thử như sau. Nó sẽ trả lại 0 nếu chuỗi phù hợp ...

System.out.println(s.compareToIgnoreCase("aBcD")); 

Nó sẽ hoạt động tốt.

Các vấn đề liên quan