2012-08-13 30 views
10

thể trùng lặp:
Is there a good way to have a Map<String, ?> get and put ignoring case?Làm cách nào để bỏ qua trường hợp nhạy cảm khi chúng tôi tìm kiếm một khóa trong Bản đồ?

Làm thế nào để bỏ qua trường hợp nhạy cảm khi tìm kiếm một khóa trong java.util.Map?

Tôi muốn biết liệu chúng tôi có thể tìm kiếm một khóa trong bản đồ hay không bằng cách bỏ qua trường hợp này.

Example, 
    Map<String, Integer> lookup = new HashMap<String, Integer>(); 
    lookup.put("one", 1); 
    lookup.put("two", 2); 
    lookup.put("three", 3); 

Thông tin nhập của người dùng có thể là "ONE" hoặc "một". trong trường hợp này thay vì chuyển đổi đầu vào của người dùng thành chữ thường. là có cách nào để bỏ qua các nhạy cảm quan trọng thông qua bất kỳ phương pháp?

Cảm ơn, Kathir

Trả lời

55

Tại sao không sử dụng một TreeMap thay vì HashMap, sau đó bạn có thể chỉ định một sánh với một trường hợp để không nhạy cảm (String.CASE_INSENSITIVE_ORDER):

public static void main(String[] args) throws Exception { 

    Map<String, Integer> lookup = 
     new TreeMap<String, Integer>(String.CASE_INSENSITIVE_ORDER); 

    lookup.put("One", 1); 
    lookup.put("tWo", 2); 
    lookup.put("thrEE", 3); 

    System.out.println(lookup.get("Two")); 
    System.out.println(lookup.get("three")); 
} 

Đầu ra:

2 
3 
+2

này thực sự là có vẻ tốt và tuyệt vời ... Thanks a lot ... – Kathir

+1

hiệu suất HashMap là O (1) & hiệu suất TreeMap O (log (n)) đọc Câu hỏi này http://stackoverflow.com/questions/2889777/difference-between-hashmap-linkedhashmap-and-treemap –

2

HashMap sử dụng khóa củaPhương pháp(kết hợp với hashCode()) và String.equals() phân biệt chữ hoa chữ thường. Vì vậy, nếu bạn muốn khóa không phân biệt chữ hoa chữ thường, bạn phải xác định lớp khóa của riêng mình với một số equals()hashCode() thích hợp. Tổng cộng, có thể dễ dàng hơn khi sử dụng toLowerCase() trên tất cả các chuỗi khóa.

+0

Bạn có thể vui lòng cung cấp một số hỗ trợ cho câu trả lời của bạn không? Ví dụ. một liên kết vv – georger

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