मामले को अनदेखा करने के लिए `string.startsWith ()` विधि का उपयोग कैसे करें?


115

मैं string.startsWith()विधि का उपयोग करना चाहता हूं लेकिन मामले की अनदेखी कर रहा हूं ।

मान लें कि मेरे पास String"सत्र" है और मैं startsWith"sEsSi" का उपयोग करता हूं तो इसे वापस आ जाना चाहिए true

इसे कैसे प्राप्त किया जा सकता है?


5
इस प्रश्न को बंद करने का कोई कारण नहीं था। वैसे भी, सबसे अच्छा समाधान यह string.regionMatches(true, 0, prefix, 0, prefix.length());है कि दोनों तारों को "सामान्य" करने की लागत का उपयोग न करें।
isapir

@AlexanderAbakumov मेरे द्वारा ठीक। सही उत्तर ऊपर मेरी टिप्पणी में पोस्ट किया गया है। यह तार के मामले को बदलने की तुलना में बहुत अधिक कुशल है। टिप्पणी के बजाय इसे उत्तर में अपग्रेड करना अच्छा होगा।
isapir

जवाबों:


98

परीक्षण करने से पहले अपनी स्ट्रिंग का उपयोग toUpperCase()या toLowerCase()मानकीकरण करें।


8
यहां बड़ी समस्या प्रदर्शन की है। छोटे स्ट्रिंग्स के लिए कोई समस्या नहीं है, लेकिन अगर आपके पास एक बड़ा है ... मेरा मतलब है ... क्या आप वास्तव में 1mb स्ट्रिंग में एक toUpperCase करेंगे केवल 4-10 inicial वर्णों की तुलना करने के लिए?
डायगोरियो

4
हम यहां तक ​​कि अगर मैं यह नहीं देख सकता कि मैं 1mb स्ट्रिंग के शुरुआती भाग की तुलना क्यों करना चाहता हूं, अगर केवल 4 - 10 प्रारंभिक वर्णों में मेरी रुचि है जो मैं प्रतिस्थापन का उपयोग करता हूं और फिर सामान्य करता हूं ...
दासता

3
यह उत्तर (और यहां पाए गए अन्य सभी उत्तर) गलत हैं। आप के कार्यान्वयन को देखें, तो String.equalsIgnoreCase()आपको लगता है कि आप की तुलना करने की जरूरत है पता चल जाएगा दोनों लोअरकेस और स्ट्रिंग्स का अपरकेस संस्करण इससे पहले कि आप अंतिम तौर लौट सकते हैं false। वैकल्पिक उत्तर के लिए stackoverflow.com/a/38947571/14731 देखें ।
गिली

10
यह उत्तर सही नहीं है क्योंकि tolowerCase () Locale.getDefault () का उपयोग आंतरिक रूप से वर्णों को बदलने के लिए करता है और इससे गलत नकारात्मक हो सकती है। मान लीजिए कि आप "इस्तानबुल" की तुलना "इस्तनबुल" से करना चाहते हैं। तुर्की में "case" का निचला मामला बराबर "ı" है। इसलिए जब मैं ऐसा करने की कोशिश करता हूं "İstanbul".toLowerCase().startsWith("istanbul".toLowerCase())(एक लोकेल.टिकी माहौल में), तो यह मुझे गलत साबित करेगा।
मुस्तफा बेरके मुतलू

1
@ उत्तर, यह उत्तर गलत है, क्योंकि स्वीकृत उत्तर बहुत से लोगों के लिए भ्रामक हो सकता है। क्या आप कृपया अपना उत्तर और रोहित जैन उत्तर का लिंक संपादित कर सकते हैं।
महापुरुष ऊँट ऊँट

88

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

"Session".toLowerCase().startsWith("sEsSi".toLowerCase());

ये गलत है। देखें: https://stackoverflow.com/a/15518878/14731


एक अन्य विकल्प String#regionMatches()विधि का उपयोग करना है, जो बूलियन तर्क को बताता है कि केस-संवेदी मिलान करना है या नहीं। आप इसे इस तरह से उपयोग कर सकते हैं:

String haystack = "Session";
String needle = "sEsSi";
System.out.println(haystack.regionMatches(true, 0, needle, 0, 5));  // true

यह जाँच करता है कि क्या के क्षेत्र needleसूचकांक से 0तक की लंबाई 5में मौजूद है haystackसूचकांक से शुरू 0लंबाई तक 5या नहीं। पहला तर्क trueयह है कि यह केस-असंवेदनशील मिलान करेगा।


और अगर आप केवल रेगेक्स के बड़े प्रशंसक हैं , तो आप कुछ इस तरह से कर सकते हैं:

System.out.println(haystack.matches("(?i)" + Pattern.quote(needle) + ".*"));

(?i) एंबेडेड फ्लैग केस मैचिंग को नजरअंदाज करने के लिए है।


1
दरअसल, मान लीजिए कि एक तालिका है जिसमें 1 लाख से अधिक प्रविष्टियां हैं, और मैं उन सभी प्रविष्टियों को पार्स करने के लिए विशेष कॉलम पर लूप के लिए उपयोग करता हूं और उस में, मैं विशेष पैटर्न के साथ शुरू होने वाली प्रविष्टि को खोजने के लिए ऊपर दिए गए इस निचले विकल्प का उपयोग करने का प्रयास करता हूं। । तो, यह एक प्रदर्शन समस्या पैदा कर रहा है। यदि कोई मैच नहीं मिला है, तो आंतरिक रूप से यह सभी प्रविष्टियों के माध्यम से पार्स करेगा, जिसमें बहुत समय लगेगा, साथ ही साथ इसके लोअरकेस में भी परिवर्तित हो जाएगा। तो क्या कोई अन्य विकल्प है, प्रदर्शन के मुद्दे को हल करने के लिए?
शीतल भटेवरा

@ रोहित जैन, वास्तव में यह: प्रॉपर System.out.println("Session".toLowerCase().startsWith("sEsSi".toLowerCase()));समाधान नहीं है। आप इसे आज़मा सकते हैं: System.out.println("SessIon".toLowerCase().startsWith("sEsSi".toLowerCase()));vm तर्कों के साथ -Duser.country=TR -Duser.language=tr इस उदाहरण में Iअपरकेस हैi
DPM



1

मुझे पता है कि मुझे देर हो गई है, लेकिन अपाचे कॉमन्स लैंग 3 से StringUtils.startsWithIgnoreCase () का उपयोग करने के बारे में क्या?

उदाहरण :

StringUtils.startsWithIgnoreCase(string, "start");

बस अपनी निर्भरता को अपने pom.xml फ़ाइल में जोड़ें (परिकल्पना का उपयोग करें जो आप मावेन का उपयोग करते हैं):

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.11</version>
</dependency>


-1

आप हमेशा कर सकते हैं

"Session".toLowerCase().startsWith("sEsSi".toLowerCase());

-1

उपयोग के साथ और toLowerCase एक साथ शुरू होता है

इस तरह

"Session".toLowerCase().startsWith("sEsSi".toLowerCase());
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.