शीर्षक संपूर्ण प्रश्न है। क्या कोई मुझे कारण दे सकता है कि ऐसा क्यों होता है?
जवाबों:
हां - क्योंकि यह खाली स्ट्रिंग से शुरू होता है। वास्तव में, खाली स्ट्रिंग तार्किक रूप से हर जोड़ी वर्णों के बीच होती है।
इसे इस तरह से रखें: क्या "की परिभाषा" से शुरू होती है, क्या आप इसे दे सकते हैं? यहाँ "के साथ शुरू होता है" की एक सरल परिभाषा है:
"यदि पहले के साथ एक्स शुरू होता है y.Length अक्षर y से मेल खाते हैं।"
एक वैकल्पिक (समतुल्य) परिभाषा:
"x की शुरुआत y से होती है अगर x.Substring(0, y.Length).Equals(y)"
जॉन स्कीट ने जो कहा, उस पर मैं विस्तार से बताने की कोशिश करूंगा।
मान लीजिए कि x, y और z स्ट्रिंग्स हैं और + ऑपरेटर वास्तव में संघनन है, तब:
अगर हम z को z = x + y लिखने के लिए विभाजित कर सकते हैं तो इसका मतलब है कि z x से शुरू होता है। क्योंकि प्रत्येक स्ट्रिंग z को z = "" + z में विभाजित किया जा सकता है, यह इस प्रकार है कि प्रत्येक स्ट्रिंग "" से शुरू होता है।
तो, क्योंकि ("" + "abcd") == "abcd" यह इस प्रकार है कि "abcd" की शुरुआत "" से होती है
यह विधि मान पैरामीटर की तुलना इस स्ट्रिंग की शुरुआत में मान के समान लंबाई पर करती है, और एक मान लौटाती है जो इंगित करता है कि क्या वे समान हैं। बराबर होने के लिए, मान एक खाली स्ट्रिंग (खाली) होना चाहिए, इसी उदाहरण का संदर्भ या इस उदाहरण की शुरुआत से मेल खाना चाहिए।
यह सच है कि यदि तर्क द्वारा दर्शाया गया वर्ण अनुक्रम इस तार द्वारा दर्शाए गए वर्ण अनुक्रम का उपसर्ग है; गलत है अन्यथा। यह भी ध्यान रखें कि यदि तर्क एक खाली स्ट्रिंग है या इस स्ट्रिंग ऑब्जेक्ट के बराबर है, तो बराबर (ऑब्जेक्ट) विधि द्वारा निर्धारित होने पर सही लौटाया जाएगा ।
मैं एक संबंधित तथ्य के साथ शुरुआत करूंगा जिसे समझना आसान है।
खाली सेट हर सेट का एक सबसेट है।
क्यों? सबसेट की परिभाषा में कहा गया है कि अगर हर तत्व एक तत्व है , तो एक सबसेट है । इसके विपरीत, का एक उपसमूह नहीं है अगर वहाँ का एक तत्व है का एक तत्व नहीं है ।ABABABAB
अब एक सेट ठीक करें B। मैं स्थापित करूँगा कि खाली सेट एक सबसेट है B। मैं यह करके दिखाऊंगा कि ऐसा नहीं है कि खाली सेट का सबसेट नहीं है B। यदि खाली सेट एक उपसमूह नहीं था, Bतो मैं उस खाली सेट का एक तत्व खोज सकता हूं जो अंदर नहीं है B। लेकिन खाली सेट में कोई तत्व नहीं होता है और इस तरह मैं एक ऐसा तत्व नहीं खोज सकता जो अंदर नहीं है B। इसलिए, यह मामला नहीं है कि खाली सेट का सबसेट नहीं है B। इस प्रकार, खाली सेट का सबसेट होना चाहिए B।
कोई भी स्ट्रिंग खाली स्ट्रिंग से शुरू होती है।
सबसे पहले, हमें अपनी शुरुआत की परिभाषा पर सहमत होना चाहिए । चलो sऔर tहो stringरों हम कहते हैं कि s के साथ शुरू होता t है, तो s.Length >= t.Lengthऔर पहले t.Lengthके पात्रों tमैच के उन s। यही है, s.Length >= t.Lengthऔर Int32 indexऐसे हर एक के लिए 0 <= index < t.Length, s[index] == t[index]सच है। इसके विपरीत, हम कहेंगे कि यदि कथन से sप्रारंभ नहीं होता हैt
s.Length < t.Lengthया s.Length >= t.Lengthवहाँ Int32 indexऐसा है कि 0 <= index < t.Lengthऔरs[index] != t[index]
सच हैं। सादे अंग्रेजी में, sकी तुलना में कम है t, या, यदि नहीं, तो tचरित्र को उसी स्थिति में मिलान नहीं करने में एक चरित्र है s।
अब एक तार को ठीक करें s। मैं स्थापित करूँगा sजो खाली स्ट्रिंग से शुरू होता है। मैं यह करके दिखाऊंगा कि यह ऐसा मामला sनहीं है जो खाली स्ट्रिंग से शुरू नहीं होता है। यदि sखाली स्ट्रिंग के साथ शुरू नहीं होता है तो s.Length < String.Empty.Lengthया s.Length >= String.Empty.Lengthऐसा Int32 indexही होता है 0 <= index < String.Empty.Length। लेकिन s.Length >= 0और String.Empty.Lengthशून्य के बराबर है इसलिए s.Length < String.Empty.Lengthसच होना असंभव है। इसी तरह, चूंकि `` स्ट्रिंग.ईमपेट.लिमिटेड is equal to zero, there is noInt32 इंडेक्स satisfying0 <= इंडेक्स <स्ट्रींग.इंप्टी।लिफ्टिंग`। इसलिये
s.Length < String.Empty.Lengthया s.Length >= String.Empty.Lengthऐसा कोई Int32 indexहै0 <= index < String.Empty.Length
गलत है। इसलिए, यह ऐसा मामला sनहीं है जो खाली स्ट्रिंग से शुरू नहीं होता है। इस प्रकार, sखाली स्ट्रिंग से शुरू करना चाहिए।
निम्नलिखित को एक विस्तार के रूप में कोडित के साथ शुरू का कार्यान्वयन है string।
public static bool DoStartsWith(this string s, string t) {
if (s.Length >= t.Length) {
for (int index = 0; index < t.Length; index++) {
if (s[index] != t[index]) {
return false;
}
}
return true;
}
return false;
}
उपर्युक्त दो निर्भीक तथ्य खाली सच बयानों के उदाहरण हैं । वे इस तथ्य के आधार पर सही हैं कि उन्हें परिभाषित करने वाला कथन ( सबसेट और शुरू होता है ) खाली ब्रह्मांडों पर सार्वभौमिक मात्राएं हैं। खाली सेट में कोई तत्व नहीं होते हैं, इसलिए खाली सेट का कोई भी तत्व किसी अन्य निर्धारित सेट में नहीं हो सकता है। खाली स्ट्रिंग में कोई वर्ण नहीं होते हैं, इसलिए कोई चरित्र नहीं हो सकता है क्योंकि खाली स्ट्रिंग में कुछ स्थिति किसी अन्य निश्चित स्ट्रिंग में उसी स्थिति में चरित्र से मेल नहीं खाती है।
चलो बस "abcd".StartsWith("")झूठ ही कहते हैं ।
यदि ऐसा है तो निम्नलिखित अभिव्यक्ति क्या है, जो सही या गलत है:
("abcd".Substring(0,0) == "")
यह पता चलता है कि यह सच हो गया है, इसलिए स्ट्रिंग खाली स्ट्रिंग;; या दूसरे शब्दों में कहें तो "abcd" का विकल्प है जो 0 की स्थिति में शुरू होता है और 0 की लंबाई खाली स्ट्रिंग के बराबर होती है। सुंदर तार्किक imo।
nullकिया गया है , के रूप में एक समान रूप से उचित वापसी मूल्य होगा।
C # में यह है कि विनिर्देश इसे प्रतिक्रिया के लिए कैसे कहता है;
बराबर होने के लिए, मान एक खाली स्ट्रिंग (खाली) होना चाहिए, इसी उदाहरण का संदर्भ या इस उदाहरण की शुरुआत से मेल खाना चाहिए।
"Abcd" क्यों करता है ।StartsWith ("") सही है?
वास्तविक उत्तर:
यह उस तरह से होना चाहिए अन्यथा आपके पास जहां मामला होगा
"".startsWith("") == false
"".equals("") == true
but yet
"a".startsWith("a") == true
"a".equals("a") == true
और फिर हमारे पास Y2K फिर से होगा क्योंकि सभी बैंक सॉफ़्टवेयर जो समान स्ट्रिंग्स पर निर्भर करते हैं, जो स्वयं से शुरू होते हैं, हमारे खातों को मिला देंगे और अचानक बिल गेट्स के पास मेरा धन होगा और मुझे उनका, और लानत है! भाग्य सिर्फ मेरे लिए ऐसा नहीं है।
यदि आप इसे नियमित अभिव्यक्ति के संदर्भ में सोचते हैं, तो यह समझ में आता है। हर स्ट्रिंग (सिर्फ "abcd", भी "" और "sdf \ nff"), 'खाली स्ट्रिंग के साथ शुरू होता है' की नियमित अभिव्यक्ति का मूल्यांकन करते समय सच हो जाता है।