Trong Java API mặc định bạn có:
String.CASE_INSENSITIVE_ORDER
Vì vậy, bạn không cần phải viết lại một so sánh nếu bạn đã sử dụng chuỗi với các cấu trúc dữ liệu được sắp xếp.
String s = "some text here";
s.equalsIgnoreCase("Some text here");
Là những gì bạn muốn kiểm tra bình đẳng thuần túy trong mã của riêng bạn.
Chỉ cần cung cấp thêm thông tin về bất kỳ điều gì liên quan đến sự bình đẳng của chuỗi trong Java. HashCode() chức năng của lớp java.lang.String "là trường hợp nhạy cảm":
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;
}
Vì vậy, nếu bạn muốn sử dụng một Hashtable/HashMap với Strings như chìa khóa, và có các phím như "SomeKey", " SOMEKEY "và" somekey "được xem như nhau, sau đó bạn sẽ phải quấn chuỗi của bạn trong một lớp khác (bạn không thể mở rộng chuỗi vì nó là một lớp cuối cùng).Ví dụ:
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;
}
}
và sau đó sử dụng nó như vậy:
HashMap<HashWrap, Object> map = new HashMap<HashWrap, Object>();
Nguồn
2013-08-21 13:36:14
Nếu bạn biết điều đó là trường hợp nhạy cảm, bạn có thể chuyển đổi tất cả thành chữ thường hoặc chữ hoa trước khi so sánh. – fastcodejava
nếu bạn sử dụng 's1.equalsIgnoreCase (s2)' bạn có thể không làm điều đó ở mọi nơi cần được thực hiện. Tôi khuyên bạn nên tìm chuỗi nơi xuất phát - một tệp hoặc cơ sở dữ liệu hoặc đầu vào của người dùng có lẽ - và chuyển đổi thành chữ hoa (hoặc chữ thường) và tiếp tục sử dụng .equals for the compare. – H2ONaCl
Không chuyển đổi thành chữ thường/chữ hoa (như gợi ý của các chú thích ở trên), sử dụng phương thức 'equalsIgnoreCase' được chấp nhận. Tìm hiểu về vấn đề Thổ Nhĩ Kỳ I và các vấn đề Unicode tương tự cho lý do cơ bản. –