В Java API по умолчанию у вас есть:
String.CASE_INSENSITIVE_ORDER
Таким образом, вам не нужно переписывать компаратор, если вы должны использовать строки с отсортированными структурами данных.
String s = "some text here";
s.equalsIgnoreCase("Some text here");
Это то, что вы хотите для чистых проверок на равенство в вашем собственном коде.
Просто для получения дополнительной информации обо всем, что касается равенства строк в Java. Функция hashCode () класса java.lang.String «чувствительна к регистру»:
public int hashCode() {
int h = hash;
if (h == 0 && value.length > 0) {
char val[] = value;
for (int i = 0; i < value.length; i++) {
h = 31 * h + val[i];
}
hash = h;
}
return h;
}
Так что, если вы хотите использовать Hashtable / HashMap со строками в качестве ключей, и чтобы ключи, такие как «SomeKey», «SOMEKEY» и «somekey», рассматривались как равные, вам придется заключить строку в другой класс Вы не можете расширять String, так как это последний класс). Например:
private static class HashWrap {
private final String value;
private final int hash;
public String get() {
return value;
}
private HashWrap(String value) {
this.value = value;
String lc = value.toLowerCase();
this.hash = lc.hashCode();
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o instanceof HashWrap) {
HashWrap that = (HashWrap) o;
return value.equalsIgnoreCase(that.value);
} else {
return false;
}
}
@Override
public int hashCode() {
return this.hash;
}
}
, а затем используйте его так:
HashMap<HashWrap, Object> map = new HashMap<HashWrap, Object>();