Как игнорировать регистр, чувствительный, когда мы ищем ключ на Карте?
Возможный дубликат:
Есть ли хороший способ иметь карту <String,?> Получить и положить игнорировать случай?
Как игнорировать регистр, чувствительный при поиске ключа в java.util.Map?
Я хочу знать, можем ли мы искать ключ на карте, игнорируя случай.
Example,
Map<String, Integer> lookup = new HashMap<String, Integer>();
lookup.put("one", 1);
lookup.put("two", 2);
lookup.put("three", 3);
Пользовательский ввод может быть "ОДИН" или "один". в таком случае вместо преобразования пользовательского ввода в нижний регистр. есть ли способ игнорировать ключ, чувствительный с помощью любых методов?
Спасибо, Катир
Ответы
Ответ 1
Почему бы не использовать TreeMap
вместо HashMap
, тогда вы можете указать Компаратор с регистром без String.CASE_INSENSITIVE_ORDER
регистра ( 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"));
}
Выходы:
2
3
Ответ 2
HashMap
использует метод equals(Object)
ключа (в сочетании с hashCode()
), а String.equals()
чувствителен к регистру. Поэтому, если вы хотите использовать нечувствительный к регистру ключ, вы должны определить свой собственный класс ключей с надлежащими equals()
и hashCode()
. В целом, возможно, проще использовать toLowerCase()
для всех ключевых строк.