2012-12-24 15 views
131
उपेक्षा

यह निर्धारित करने के लिए एक स्ट्रिंग str1="ABCDEFGHIJKLMNOP" एक स्ट्रिंग पैटर्न strptrn="gHi" शामिल संभव है? मैं जानना चाहता था कि क्या यह संभव है जब पात्र केस असंवेदनशील हों। यदि हां, तो कैसे?स्ट्रिंग शामिल हैं - मामले

Pattern.compile(Pattern.quote(strptrn), Pattern.CASE_INSENSITIVE).matcher(str1).find(); 
+1

उपयोग toUpperCase() ?? – Ravi

उत्तर

195

आप

उपयोग कर सकते हैं
org.apache.commons.lang3.StringUtils.containsIgnoreCase(CharSequence str, 
            CharSequence searchStr); 

चेक करता है कि CharSequence में कोई खोज CharSequenc है ई मामले के बावजूद, शून्य को संभालना। केस-असंवेदनशीलता String.equalsIgnoreCase (स्ट्रिंग) द्वारा के रूप में परिभाषित किया गया है।

एक अशक्त CharSequence अवास्तविक लौटाते हैं।

यह एक regex की तुलना में बेहतर हो जाएगा regex हमेशा महंगा है के रूप में प्रदर्शन के मामले में।

आधिकारिक दस्तावेज़ के लिए, संदर्भित करने के लिए: StringUtils.containsIgnoreCase

अद्यतन:

आप लोगों के बीच कर रहे हैं जो

  • अपाचे कॉमन्स पुस्तकालय का उपयोग नहीं करना चाहते हैं
  • डॉन 'टी, महंगा regex/Pattern आधारित समाधान के साथ जाना चाहता हूँ
  • , toLowerCase का उपयोग करके अतिरिक्त स्ट्रिंग वस्तु बनाने के लिए

आप java.lang.String.regionMatches

public boolean regionMatches(boolean ignoreCase, 
          int toffset, 
          String other, 
          int ooffset, 
          int len) 

ignoreCase का उपयोग कर अपने स्वयं के कस्टम containsIgnoreCase लागू कर सकते हैं नहीं करना चाहती: अगर सही है, मामले पर ध्यान नहीं देता जब पात्रों की तुलना।

public static boolean containsIgnoreCase(String str, String searchStr)  { 
    if(str == null || searchStr == null) return false; 

    final int length = searchStr.length(); 
    if (length == 0) 
     return true; 

    for (int i = str.length() - length; i >= 0; i--) { 
     if (str.regionMatches(true, i, searchStr, 0, length)) 
      return true; 
    } 
    return false; 
} 
+1

धन्यवाद। वहां कई अन्य अच्छी चीजें हैं, जैसे indexOfIgnoreCase ... – vikingsteve

+6

यह विधि एक धारणा बनाती है कि घास के मिलान किए गए भाग की लंबाई सुई की लंबाई के रूप में यूटीएफ -16 कोड इकाइयों की समान संख्या होगी। तो यदि आप "ß" खोज रहे हैं और स्ट्रिंग में "एसएस" है, तो यह एक मैच नहीं मिलेगा, भले ही आप इन दो तारों को समान मानते हैं (यदि जर्मन लोकेल में, और निश्चित रूप से आपको करना है जब भी इस तरह की चीज कर रहे हों तो लोकेल सेट करें।) – Trejkaz

+3

org.apache.commons.lang3.String इस पैकेज को एंड्रॉइड –

21

आप केस संवेदी मिलान के लिए CASE_INSENSITIVE ध्वज के साथ java.util.regex.Pattern उपयोग कर सकते हैं

"ABCDEFGHIJKLMNOP".toLowerCase().contains("gHi".toLowerCase()) 
+1

ले पिछले जवाब @SamStephens पर एक नज़र लिखा http://stackoverflow.com/a/6996550/372926: तुम दोनों CASE_INSENSITIVE और UNICODE_CASE निर्दिष्ट करना होगा, और आप अभी भी सही मान नहीं मिलेगा, क्योंकि जबकि जावा पूर्ण casemapping का उपयोग करता है, यह केवल साधारण केसफोल्डिंग का उपयोग करता है। यह एक समस्या है।" – Vini

206

आप regex के साथ नहीं जाना होगा, तो::

+2

हालांकि यह एक जवाब हो सकता है, मुझे नहीं लगता कि यह बड़े 'स्ट्रिंग की –

+17

पर एक अच्छा समाधान है यह यूनिकोड की विस्तृत दुनिया में काम नहीं करता है - http://stackoverflow.com/a/6996550/ देखें 372,926 – SamStephens

+1

यदि 'की तरह (file.getName()। toLowerCase() \t \t \t \t \t \t .contains (editText.getText()। toString()। toLowerCase()))' –

7

इस

public static void main(String[] args) 
{ 

    String original = "ABCDEFGHIJKLMNOPQ"; 
    String tobeChecked = "GHi"; 

    System.out.println(containsString(original, tobeChecked, true));   
    System.out.println(containsString(original, tobeChecked, false)); 

} 

public static boolean containsString(String original, String tobeChecked, boolean caseSensitive) 
{ 
    if (caseSensitive) 
    { 
     return original.contains(tobeChecked); 

    } 
    else 
    { 
     return original.toLowerCase().contains(tobeChecked.toLowerCase()); 
    } 

} 
+1

में उपलब्ध नहीं है, यदि आप संवेदनशील तरीके से मूल्य की जांच करना चाहते हैं और यदि आप चाहते हैं तो झूठी पास करें असंवेदनशील तरीके से मूल्य की जांच की जानी चाहिए। –

1

एक अनुकूलित इमरान तारिक के संस्करण

Pattern.compile(strptrn, Pattern.CASE_INSENSITIVE + Pattern.LITERAL).matcher(str1).find(); 

Pattern.quote (strptrn) हमेशा रिटर्न "\ क्यू '+ S +" \ ई "भले ही प्रयास करें वहाँ उद्धरण के लिए कुछ भी नहीं है, संगतता खराब प्रदर्शन प्रदर्शन।

+0

आपको bitwise का उपयोग करना चाहिए | अतिरिक्त ऑपरेटर के बजाय ऑपरेटर। –

संबंधित मुद्दे