कैसे जांचें कि क्या एक स्ट्रिंग कई उपसर्गों में से एक के साथ शुरू होती है?


101

यदि कथन है तो मेरे पास निम्नलिखित हैं:

String newStr4 = strr.split("2012")[0];
if (newStr4.startsWith("Mon")) {
    str4.add(newStr4);
}

मैं इसे शामिल करना चाहता हूं startsWith Mon Tues Weds Thurs Fridayआदि। क्या स्ट्रिंग्स का उपयोग करते समय इसका एक सरल तरीका है? मैंने कोशिश की ||लेकिन यह काम नहीं किया।


4
आप मतलब है आप "Mon||Tues"आदि की कोशिश की ? या आपने इस्तेमाल किया newStr4.startsWith("Mon")||newStr4.startsWith("Tues") ...? किसी भी तरह से, "यह काम नहीं किया" को परिभाषित करें।
थॉमस

क्या आप किसी भी मौके पर डेट को पार्स करने की कोशिश कर रहे हैं ?? यदि ऐसा है तो SimpleDateFormat का उपयोग करें ...
एडम

जवाबों:


176

क्या आपका यह मतलब है:

if (newStr4.startsWith("Mon") || newStr4.startsWith("Tues") || ...)

या आप नियमित अभिव्यक्ति का उपयोग कर सकते हैं:

if (newStr4.matches("(Mon|Tues|Wed|Thurs|Fri).*"))

2
क्या आपके द्वारा सुझाए गए दो तरीकों में कोई प्रदर्शन अंतर है?
theCrazyProgrammer

6
@ TheCrazyProgrammer बेशक है; कच्चे स्ट्रिंग विधि कॉल की तुलना में नियमित अभिव्यक्ति के माध्यम से मिलान बहुत अधिक महंगा है। सटीक आंकड़े जो मैं नहीं दे सकता, लेकिन यह आम सहमति है।
कलार

52

पहले से प्रस्तुत समाधानों के अलावा, आप अपाचे कॉमन्स लैंग लाइब्रेरी का उपयोग कर सकते हैं:

if(StringUtils.startsWithAny(newStr4, new String[] {"Mon","Tues",...})) {
  //whatever
}

अद्यतन: कुछ बिंदुओं पर वैरगल्स की शुरूआत अब कॉल को सरल बनाती है:

StringUtils.startsWithAny(newStr4, "Mon", "Tues",...)

31

Streamअब तक किसी ने उल्लेख नहीं किया है, इसलिए यहां यह है:

if (Stream.of("Mon", "Tues", "Wed", "Thurs", "Fri").anyMatch(s -> newStr4.startsWith(s)))

6
महान (और अप-टू-डेट) उत्तर ... btw s -> newStr4.startsWith(s)को newStr7::startsWithस्पष्ट करने के लिए प्रतिस्थापित किया जा सकता है
जोर्डी कास्टिला

मैं यहां कैसे अनदेखी कर सकता हूं?
सुखबुद्ध

आप स्ट्रिंग toLowerCase () फ़ंक्शन का उपयोग कर सकते हैं।
Ilia Kopysov

7

एक सरल उपाय है:

if (newStr4.startsWith("Mon") || newStr4.startsWith("Tue") || newStr4.startsWith("Wed"))
// ... you get the idea ...

एक कट्टर समाधान होगा:

List<String> days = Arrays.asList("SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT");
String day = newStr4.substring(0, 3).toUpperCase();
if (days.contains(day)) {
    // ...
}

3
या Arrays.binarySearch () यदि वे खोज सूची क्रमबद्ध हैं: D
ब्रेंडन लांग

2
@BrendanLong इतनी छोटी सूची के लिए एक ओवरकिल का एक सा है, लेकिन ठीक है :)
zscar López

3

बेशक, इस बात का ध्यान रखें कि आपका कार्यक्रम केवल अंग्रेजी बोलने वाले देशों में उपयोगी होगा यदि आप इस तरह से तारीखों का पता लगाते हैं। आप विचार करना चाह सकते हैं:

Set<String> dayNames = Calendar.getInstance()
 .getDisplayNames(Calendar.DAY_OF_WEEK,
      Calendar.SHORT,
      Locale.getDefault())
 .keySet();

वहां से आप .starts का उपयोग कर सकते हैं। या अन्य तरीकों का उल्लेख कर सकते हैं जो अन्य उपर्युक्त हैं। इस तरह से आपको jvm के लिए डिफ़ॉल्ट लोकेल मिलता है। आप हमेशा लोकल में पास कर सकते हैं (और सिस्टम लोकेल में इसे डिफॉल्ट कर सकते हैं अगर यह शून्य है) और साथ ही अधिक मजबूत होने के लिए।


1
if(newStr4.startsWith("Mon") || newStr4.startsWith("Tues") || newStr4.startsWith("Weds") .. etc)

आपको str.startsWith(otherStr)प्रत्येक आइटम के लिए संपूर्ण शामिल करने की आवश्यकता है , क्योंकि ||केवल बूलियन अभिव्यक्तियों (सच्चे या गलत) के साथ काम करता है।

अन्य विकल्प हैं यदि आपके पास जांचने के लिए बहुत सी चीजें हैं, जैसे कि नियमित अभिव्यक्तियाँ , लेकिन वे धीमी गति से होती हैं और अधिक जटिल नियमित अभिव्यक्ति आमतौर पर पढ़ने में कठिन होती हैं।

दिन के संक्षिप्त नाम का पता लगाने के लिए एक नियमित अभिव्यक्ति का उदाहरण होगा:

if(Pattern.matches("Mon|Tues|Wed|Thurs|Fri", stringToCheck)) {

0

जब आप कहते हैं कि आपने OR का उपयोग करने का प्रयास किया है, तो आपने वास्तव में कैसे प्रयास किया और इसका उपयोग किया? आपके मामले में, आपको जो करने की आवश्यकता होगी वह कुछ इस तरह होगा:

String newStr4 = strr.split("2012")[0];
if(newStr4.startsWith("Mon") || newStr4.startsWith("Tues")...)
str4.add(newStr4);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.