डिफ़ॉल्ट जावा एपीआई में आप हैं:
String.CASE_INSENSITIVE_ORDER
तो तुम एक तुलनित्र के पुनर्लेखन के लिए आप छाँटे गए डेटा संरचनाओं के साथ तार का उपयोग करने के लिए गए थे, तो जरूरत नहीं है।
String s = "some text here";
s.equalsIgnoreCase("Some text here");
क्या आप अपने कोड में शुद्ध समानता जांच के लिए चाहते हैं।
जावा में स्ट्रिंग्स की समानता से संबंधित किसी भी चीज़ के बारे में और जानकारी के लिए बस। java.lang.String वर्ग के hashCode() फ़ंक्शन "केस संवेदी है":
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" की तरह कुंजी चाहते हैं, तो " सोमेकी "और" कुछकी "को बराबर के रूप में देखा जाना चाहिए, तो आपको अपनी स्ट्रिंग को किसी अन्य वर्ग में लपेटना होगा (आप स्ट्रिंग का विस्तार नहीं कर सकते क्योंकि यह अंतिम श्रेणी है)।उदाहरण के लिए:
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>();
स्रोत
2013-08-21 13:36:14
आप जानते हैं कि यह केस संवेदी है, तो आप दोनों लोअरकेस या की तुलना से पहले अपरकेस में परिवर्तित कर सकते हैं। – fastcodejava
यदि आप 's1.equalsIgnoreCase (s2) का उपयोग करते हैं, तो आप इसे हर जगह करने में विफल हो सकते हैं, इसे करने की आवश्यकता है। मेरा सुझाव है कि आप पाते हैं कि स्ट्रिंग कहां से आती है - फ़ाइल या डेटाबेस या उपयोगकर्ता इनपुट शायद - और या तो अपरकेस (या लोअरकेस) में कनवर्ट करें और तुलना के लिए .equals का उपयोग जारी रखें। – H2ONaCl
निचले/अपरकेस में परिवर्तित न करें (जैसा उपरोक्त टिप्पणियों द्वारा सुझाया गया है), स्वीकार किए गए 'equalsIgnoreCase' दृष्टिकोण का उपयोग करें। तुर्की I समस्या और तर्क के लिए समान यूनिकोड मुद्दों पर पढ़ें। –