दिलचस्प पोस्ट
कैसे सी # में एमएस कार्यालय दस्तावेजों से पाठ निकालने के लिए "प्रिंटआउट" के बजाय "वर्किंग" शैली के वातावरण में ग्राफिक्स कैसे निर्यात करें? Firefox3 पर windows.location.href काम नहीं कर रहा है PHP में, मैं पाठ के ब्लॉक से कई ई-मेल पते कैसे निकालूं और उन्हें एक सरणी में डालूं? जावास्क्रिप्ट एईएस एन्क्रिप्शन <B> और <strong>, <i> और <em> के बीच अंतर क्या है? इम्प्लासिट टाइपिंग; क्यों सिर्फ स्थानीय चर? Boost_mutex बढ़ाने के लिए उदाहरण (एकाधिक पढ़ता / एक लिखना)? एंड्रॉइड में तिथि और समय बदलें श्रोता? सीएसएस जब इनलाइन ब्लॉक तत्वों लाइन-ब्रेक, माता-पिता आवरण नई चौड़ाई फिट नहीं है सी # में एक टेलीफोन नंबर के रूप में स्ट्रिंग को कैसे प्रारूपित करें रीसाइक्लर हेडर और पाद लेख देखें एकाधिक / सिंगल उदाहरण के लिए Linq को SQL DataContext php preg_replace regex जो कई लाइनों से मेल खाता है दो जीआईटी रिपॉजिटरी सिंक्रनाइज़ कैसे करें

अगर किसी स्ट्रिंग में कोई भी स्ट्रिंग किसी सरणी से है, तो परीक्षण करें

मैं यह देखने के लिए कैसे एक स्ट्रिंग का परीक्षण कर सकता हूं कि इसमें किसी भी स्ट्रिंग को किसी सरणी से है?

के बजाय का उपयोग करने का

if (string.contains(item1) || string.contains(item2) || string.contains(item3)) 

Solutions Collecting From Web of "अगर किसी स्ट्रिंग में कोई भी स्ट्रिंग किसी सरणी से है, तो परीक्षण करें"

संपादित करें: यहां जावा 8 स्ट्रीमिंग एपीआई का उपयोग करके अपडेट किया गया है। इतना क्लीनर अभी भी नियमित अभिव्यक्ति के साथ जोड़ा जा सकता है

 public static boolean stringContainsItemFromList(String inputStr, String[] items) { return Arrays.stream(items).parallel().anyMatch(inputStr::contains); } 

इसके अलावा, यदि हम एक items.parallelStream().anyMatch(inputStr::contains) बजाय सूची में इनपुट प्रकार को बदलते हैं तो हम items.parallelStream().anyMatch(inputStr::contains) उपयोग कर सकते हैं items.parallelStream().anyMatch(inputStr::contains)

आप .filter(inputStr::contains).findAny() भी उपयोग कर सकते हैं यदि आप मिलान स्ट्रिंग वापस करना चाहते हैं।


मूल थोड़ा दिनांक उत्तर:

यहाँ एक (बहुत बुनियादी) स्थिर विधि है। ध्यान दें कि यह तुलना स्ट्रिंग्स पर केस संवेदनशील है। यह मामला असंवेदनशील बनाने का एक आदिम तरीका है इनपुट और टेस्ट स्ट्रिंग दोनों पर toLowerCase() या toUpperCase() को कॉल करना होगा।

अगर आपको इस से ज़्यादा जटिल कुछ करने की आवश्यकता है, तो मैं पैटर्न और मैचर कक्षाओं को देखकर और कुछ नियमित अभिव्यक्ति कैसे सीखने की सलाह दूंगा । एक बार जब आप समझते हैं, तो आप उन वर्गों या String.matches() सहायक विधि का उपयोग कर सकते हैं।

 public static boolean stringContainsItemFromList(String inputStr, String[] items) { for(int i =0; i < items.length; i++) { if(inputStr.contains(items[i])) { return true; } } return false; } 
 import org.apache.commons.lang.StringUtils; 

स्ट्रिंग यूटील्स

उपयोग:

 StringUtils.indexOfAny(inputString, new String[]{item1, item2, item3}) 

यह मिले स्ट्रिंग का इंडेक्स वापस करेगा या -1 अगर कोई नहीं मिलेगा।

आप इस तरह स्ट्रिंग # मैचों का उपयोग कर सकते हैं:

 System.out.printf("Matches - [%s]%n", string.matches("^.*?(item1|item2|item3).*$")); 

सबसे आसान तरीका शायद सरणी को एक java.util.ArrayList में कनवर्ट करना होगा। एक बार यह एक सरणी सूची में है, तो आप उस विधि को आसानी से लाभ उठा सकते हैं।

 public static boolean bagOfWords(String str) { String[] words = {"word1", "word2", "word3", "word4", "word5"}; return (Arrays.asList(words).contains(str)); } 

इसे इस्तेमाल करे:

 if (Arrays.asList(item1, item2, item3).contains(string)) 

यदि आप जावा 8 या इसके बाद के संस्करण का उपयोग करते हैं, तो आप ऐसा करने के लिए स्ट्रीम एपीआई पर भरोसा कर सकते हैं:

 public static boolean containsItemFromArray(String inputString, String[] items) { // Convert the array of String items as a Stream // For each element of the Stream call inputString.contains(element) // If you have any match returns true, false otherwise return Arrays.stream(items).anyMatch(inputString::contains); } 

यह मानते हुए कि आपके पास परीक्षण करने के लिए String का एक बड़ा सरणी है, आप parallel() कॉल करके खोज को समानांतर भी कर सकते हैं, तो कोड निम्न होगा:

 return Arrays.stream(items).parallel().anyMatch(inputString::contains); 

यहां एक समाधान है:

 public static boolean containsAny(String str, String[] words) { boolean bResult=false; // will be set, if any of the words are found //String[] words = {"word1", "word2", "word3", "word4", "word5"}; List<String> list = Arrays.asList(words); for (String word: list ) { boolean bFound = str.contains(word); if (bFound) {bResult=bFound; break;} } return bResult; } 
 if (Arrays.asList(array).contains(string)) 

मेटाक्लास के साथ संयोजन में इंजेक्शन का उपयोग करने के लिए एक अधिक ग्रोवइस्क दृष्टिकोण होगा:

मुझे कहना अच्छा लगेगा:

 String myInput="This string is FORBIDDEN" myInput.containsAny(["FORBIDDEN","NOT_ALLOWED"]) //=>true 

और विधि यह होगी:

 myInput.metaClass.containsAny={List<String> notAllowedTerms-> notAllowedTerms?.inject(false,{found,term->found || delegate.contains(term)}) } 

यदि आप की आवश्यकता है किसी भी भविष्य के स्ट्रिंग वेरिएबल के लिए उपस्थित होने के लिए कोई भी ऑब्जेक्ट के बजाय कक्षा में विधि जोड़ें:

 String.metaClass.containsAny={notAllowedTerms-> notAllowedTerms?.inject(false,{found,term->found || delegate.contains(term)}) } 

और अगर आप केस असंवेदनशील मैच की तलाश कर रहे हैं तो पैटर्न का उपयोग करें

 Pattern pattern = Pattern.compile("\\bitem1 |item2\\b",java.util.regex.Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher(input); if(matcher.find() ){ } 
 String.prototype.matchWithTokens = function(tokensArray){ for(i=0; i< tokensArray.length; i++) { if(this.indexOf(tokensArray[i]) != -1) { return true; } } return false; }; 

नीचे आपके लिए संभालने के लिए कार्य करना चाहिए स्ट्रिंग्स वह सरणी है जिसे आप भीतर खोज रहे हैं:

 Arrays.binarySearch(Strings,"mykeytosearch",mysearchComparator); 

जहां mykeytosearch स्ट्रिंग है जिसे आप सरणी के भीतर अस्तित्व के लिए परीक्षण करना चाहते हैं। mysearchComparator – एक तुलनित्र है जो स्ट्रिंग की तुलना करने के लिए उपयोग किया जाएगा।

अधिक जानकारी के लिए arrays.binarySearch को देखें।