शीर्षक संपूर्ण प्रश्न है। क्या कोई मुझे कारण दे सकता है कि ऐसा क्यों होता है?
जवाबों:
हां - क्योंकि यह खाली स्ट्रिंग से शुरू होता है। वास्तव में, खाली स्ट्रिंग तार्किक रूप से हर जोड़ी वर्णों के बीच होती है।
इसे इस तरह से रखें: क्या "की परिभाषा" से शुरू होती है, क्या आप इसे दे सकते हैं? यहाँ "के साथ शुरू होता है" की एक सरल परिभाषा है:
"यदि पहले के साथ एक्स शुरू होता है 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" की शुरुआत "" से होती है
यह विधि मान पैरामीटर की तुलना इस स्ट्रिंग की शुरुआत में मान के समान लंबाई पर करती है, और एक मान लौटाती है जो इंगित करता है कि क्या वे समान हैं। बराबर होने के लिए, मान एक खाली स्ट्रिंग (खाली) होना चाहिए, इसी उदाहरण का संदर्भ या इस उदाहरण की शुरुआत से मेल खाना चाहिए।
यह सच है कि यदि तर्क द्वारा दर्शाया गया वर्ण अनुक्रम इस तार द्वारा दर्शाए गए वर्ण अनुक्रम का उपसर्ग है; गलत है अन्यथा। यह भी ध्यान रखें कि यदि तर्क एक खाली स्ट्रिंग है या इस स्ट्रिंग ऑब्जेक्ट के बराबर है, तो बराबर (ऑब्जेक्ट) विधि द्वारा निर्धारित होने पर सही लौटाया जाएगा ।
मैं एक संबंधित तथ्य के साथ शुरुआत करूंगा जिसे समझना आसान है।
खाली सेट हर सेट का एक सबसेट है।
क्यों? सबसेट की परिभाषा में कहा गया है कि अगर हर तत्व एक तत्व है , तो एक सबसेट है । इसके विपरीत, का एक उपसमूह नहीं है अगर वहाँ का एक तत्व है का एक तत्व नहीं है ।A
B
A
B
A
B
A
B
अब एक सेट ठीक करें 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 no
Int32 इंडेक्स satisfying
0 <= इंडेक्स <स्ट्रींग.इंप्टी।लिफ्टिंग`। इसलिये
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"), 'खाली स्ट्रिंग के साथ शुरू होता है' की नियमित अभिव्यक्ति का मूल्यांकन करते समय सच हो जाता है।