स्ट्रिंग्स इनर वर्किंग्स, और सबस्ट्रिंग विधि - 1

"हाय, अमीगो!"

"हाय, ऐली।"

"मैं आपको सबस्ट्रिंग के बारे में बताने जा रहा हूँ। एक सबस्ट्रिंग एक स्ट्रिंग का एक हिस्सा है। और स्ट्रिंग्स पर किया जाने वाला सबसे आम ऑपरेशन (कई स्ट्रिंग्स को एक साथ जोड़ने के बाद) एक सबस्ट्रिंग प्राप्त करना है।"

7) मैं स्ट्रिंग का हिस्सा कैसे प्राप्त करूं?

"सबस्ट्रिंग विधि स्ट्रिंग का हिस्सा लौटाती है। इस विधि के दो संस्करण हैं।"

"पहला संस्करण सूचकांकों को शुरू और समाप्त करके निर्दिष्ट सबस्ट्रिंग देता है। लेकिन अंत में सूचकांक में वर्ण शामिल नहीं है! यदि आप संख्या 1 और 3 पास करते हैं, तो सबस्ट्रिंग में केवल दूसरे और तीसरे वर्ण होंगे (याद रखें कि सूचकांक शुरू होते हैं 0 के साथ)।"

"दूसरा संस्करण पास किए गए इंडेक्स से स्ट्रिंग के अंत तक सबस्ट्रिंग देता है।"

विधि उदाहरण)
String substring(int beginIndex, int endIndex)
String s = "Good news, everyone!";
s = s.substring(1,6);
परिणाम:

s == "ood n";
String substring(int beginIndex)
String s = "Good news, everyone!";
s = s.substring(1);

"यह काफी आसान है। धन्यवाद, ऐली।"

"मैं आपको स्ट्रिंग ऑब्जेक्ट्स की आंतरिक कार्यप्रणाली भी समझाऊंगा।"

"जैसा कि आप शायद पहले से ही जानते हैं, स्ट्रिंग एक अपरिवर्तनीय वर्ग है। और इससे हमें क्या फायदे मिलते हैं? जैसा कि होता है, प्रमुख लाभों में से एक सबस्ट्रिंग प्राप्त करने की क्षमता है। लेकिन पहले चीजें पहले।"

"आंतरिक रूप से, एक स्ट्रिंग ऑब्जेक्ट में वर्णों की एक सरणी होती है, जिसका अनुमान लगाना कठिन नहीं है। लेकिन यह दो और चर भी संग्रहीत करता है: सरणी में पहले वर्ण की अनुक्रमणिका और वर्ण गणना। अब मैं आपको बताऊंगा कि ये क्या हैं के लिए प्रयोग किया जाता है।"

"जब हम सबस्ट्रिंग विधि का उपयोग करके सबस्ट्रिंग बनाते हैं , तो एक नई स्ट्रिंग ऑब्जेक्ट बनाई जाती है।"

"लेकिन, एक नए वर्ण सरणी के संदर्भ को संग्रहीत करने के बजाय, ऑब्जेक्ट पुराने सरणी के साथ-साथ दो चरों के संदर्भ को संग्रहीत करता है जो कि इसके साथ जुड़े मूल वर्ण सरणी के भाग को निर्धारित करने के लिए उपयोग करता है।"

"मुझे उसमें से कुछ भी समझ नहीं आया।"

"जब एक सबस्ट्रिंग बनाया जाता है, तो वर्ण सरणी को नए स्ट्रिंग ऑब्जेक्ट में कॉपी नहीं किया जाता है। इसके बजाय, दोनों ऑब्जेक्ट मूल वर्ण सरणी के संदर्भ को संग्रहीत करते हैं। लेकिन! दूसरी वस्तु दो चर भी संग्रहीत करती है: सरणी में इसकी प्रारंभिक अनुक्रमणिका और सबस्ट्रिंग से संबंधित वर्णों की संख्या।"

"इसकी जांच - पड़ताल करें:"

एक सबस्ट्रिंग प्राप्त करना सबस्ट्रिंग के अंदर क्या संग्रहित है
String s = "mama";
एस में क्या संग्रहीत है:

char[] value = {'m','a','m','a'};
offset = 0;
count = 4;
String s2 = s.substring(1);
S2 में क्या संग्रहित है:

char[] value = {'m','a','m','a'};
offset = 1;
count = 3;
String s3 = s.substring(1, 3);
S3 में क्या संग्रहित है:

char[] value = {'m','a','m','a'};
offset = 1;
count = 2;

"सभी तीन स्ट्रिंग्स एक ही चार सरणी के संदर्भ को संग्रहीत करते हैं, लेकिन वे पहले और अंतिम वर्णों के सूचकांक को भी संग्रहीत करते हैं जो उनसे संबंधित हैं। या अधिक सटीक रूप से, पहले वर्ण की अनुक्रमणिका और वर्ण गणना।"

"यह अब समझ में आता है।"

"इसलिए, यदि आप एक स्ट्रिंग लेते हैं जो 10,000 वर्ण लंबा है और आप किसी भी लम्बाई के 10,000 सबस्ट्रिंग बनाते हैं, तो ये सबस्ट्रिंग्स बहुत कम मेमोरी का उपयोग करेंगे, क्योंकि वर्ण सरणी डुप्लिकेट नहीं है। ये स्ट्रिंग्स, जिन्हें आप बहुत अधिक उपयोग करने की उम्मीद करेंगे अंतरिक्ष का, सचमुच केवल कुछ बाइट लेगा।"

"ठंडा!"

"लेकिन क्या आप ऐसा कर सकते हैं यदि आप स्ट्रिंग्स को संशोधित कर सकते हैं?"

"नहीं, कोई पहले स्ट्रिंग को बदल सकता है, और फिर इसके सभी सबस्ट्रिंग भी बदल जाएंगे। अब यह समझ में आता है कि उन्होंने ऐसा क्यों किया। यह वास्तव में अच्छा समाधान है।"

"मुझे खुशी है कि तुम्हें इसे पसंद किया है।"