"नमस्कार, अमीगो!"

"नमस्कार, ऋषि!"

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

"पेचीदा लगता है, हालांकि यह मेरे लिए पूरी तरह से स्पष्ट नहीं है कि सामान्य तार कैसे कम हो जाते हैं और अन्य स्ट्रिंग-जैसी कक्षाओं की आवश्यकता क्यों होती है।"

"आइए इस तथ्य से शुरू करें कि तार जावा में अपरिवर्तनीय वस्तुएं हैं।"

"वह कैसे है? मैं भूल गया...या मुझे कभी पता ही नहीं चला कि शुरू करना है..."

"मैं आपको याद दिला दूं कि अपरिवर्तनीय वस्तुएं वे हैं जिनकी स्थिति बनने के बाद उन्हें बदला नहीं जा सकता है।"

"आह... जावा में तार अपरिवर्तनीय क्यों हैं?"

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

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

"लेकिन यह किस लिए अच्छा है?"

"ठीक है, मान लीजिए कि हमारे पास एक बहुत बड़ी स्ट्रिंग है और हमें इसके अंत में बार-बार कुछ जोड़ने की आवश्यकता है। इस मामले में, वर्णों का एक संग्रह भी ( ) ArrayList<Character>लगातार स्ट्रिंग ऑब्जेक्ट्स को फिर से बनाने और जोड़ने से अधिक कुशल हो सकता है।"

"और इसीलिए हमें ऐसे स्ट्रिंग्स की आवश्यकता है जो बिल्कुल स्ट्रिंग क्लास नहीं हैं?"

"बिल्कुल सही। जावा भाषा में एक स्ट्रिंग-जैसा प्रकार जोड़ा गया है जिसे बदला जा सकता है। इसे StringBuilder"कहा जाता है।"

एक वस्तु बनाना

StringBuilder" मौजूदा स्ट्रिंग के आधार पर ऑब्जेक्ट बनाने के लिए , आपको एक कथन निष्पादित करने की आवश्यकता है:

StringBuilder name = new StringBuilder(string);

"एक खाली म्यूटेबल स्ट्रिंग बनाने के लिए, आपको इस तरह के एक बयान का उपयोग करने की आवश्यकता है:

StringBuilder name = new StringBuilder();

विधियों की सूची

" StringBuilderकक्षा में दो दर्जन सहायक विधियाँ हैं। यहाँ सबसे महत्वपूर्ण हैं:

तरीका विवरण
StringBuilder append(obj)
पारित वस्तु को एक स्ट्रिंग में परिवर्तित करता है और इसे वर्तमान स्ट्रिंग में जोड़ता है
StringBuilder insert(int index, obj)
पारित वस्तु को एक स्ट्रिंग में परिवर्तित करता है और वर्तमान स्ट्रिंग के मध्य में सम्मिलित करता है
StringBuilder replace(int start, int end, String str)
प्रारंभ..अंत अंतराल द्वारा निर्दिष्ट स्ट्रिंग के भाग को पारित स्ट्रिंग के साथ बदलता है
StringBuilder deleteCharAt(int index)
स्ट्रिंग से निर्दिष्ट इंडेक्स वाले वर्ण को हटाता है
StringBuilder delete(int start, int end)
स्ट्रिंग से निर्दिष्ट अंतराल के भीतर वर्णों को हटाता है
int indexOf(String str, int index)
वर्तमान स्ट्रिंग में एक सबस्ट्रिंग की खोज करता है
int lastIndexOf(String str, int index)
अंत से शुरू करते हुए, वर्तमान स्ट्रिंग में एक सबस्ट्रिंग की खोज करता है
char charAt(int index)
पास किए गए इंडेक्स पर स्ट्रिंग में वर्ण लौटाता है
String substring(int start, int end)
निर्दिष्ट अंतराल द्वारा परिभाषित सबस्ट्रिंग देता है
StringBuilder reverse()
वर्तमान स्ट्रिंग को उलट देता है।
void setCharAt(int index, char)
निर्दिष्ट इंडेक्स पर वर्ण को पास किए गए वर्ण में बदल देता है
int length()
वर्णों में स्ट्रिंग की लंबाई लौटाता है

"और अब मैं आपको इनमें से प्रत्येक विधि का संक्षिप्त वर्णन करूँगा।

एक स्ट्रिंग से जुड़ रहा है

"एक परिवर्तनशील स्ट्रिंग ( ) में कुछ जोड़ने के लिए StringBuilder, append()विधि का उपयोग करें। उदाहरण:

कोड विवरण
StringBuilder builder = new StringBuilder("Hi");
builder.append("Bye");
builder.append(123);
Hi
HiBye
HiBye123

एक मानक स्ट्रिंग में कनवर्ट करना

StringBuilder" ऑब्जेक्ट को स्ट्रिंग ऑब्जेक्ट में बदलने के लिए , आपको बस इसकी toString()विधि को कॉल करने की आवश्यकता है। उदाहरण

कोड उत्पादन
StringBuilder builder = new StringBuilder("Hi");
builder.append(123);
String result = builder.toString();
System.out.println(result);
Hi123

मैं एक चरित्र को कैसे हटाऊं?

"एक परिवर्तनीय स्ट्रिंग में एक वर्ण को हटाने के लिए, आपको deleteCharAt()विधि का उपयोग करने की आवश्यकता है। उदाहरण:

कोड उत्पादन
StringBuilder builder = new StringBuilder("Hello");
builder.deleteCharAt(2);
String result = builder.toString();
System.out.println(result);
Helo

मैं एक स्ट्रिंग के हिस्से को दूसरी स्ट्रिंग से कैसे बदलूं?

"इसके लिए विधि है replace(int begin, int end, String str)। उदाहरण:

कोड उत्पादन
StringBuilder builder = new StringBuilder("Mellow");
builder.replace(2, 5, "Hello!");
String result = builder.toString();
System.out.println(result);
MeHello!w

"सुविधाजनक लगता है। धन्यवाद, ऋषि।"

"इसका जिक्र मत करो। इसके बारे में क्या ख्याल है, क्या आप एक स्ट्रिंग को पीछे की ओर फ्लिप कर सकते हैं? आप इसे कैसे करेंगे?"

"खैर... मैं एक बनाऊंगा StringBuilder, उसमें एक स्ट्रिंग डालूंगा... फिर एक नया स्ट्रिंग बनाऊंगा, और एक लूप में अंतिम वर्ण से पहले वर्ण तक... या शायद थोड़ा सा बदलाव...

"बुरा नहीं है। लेकिन यह तेज़ हो सकता है। ऐसा करने के लिए एक विशेष तरीका है - reverse();उदाहरण:

कोड उत्पादन
String str = "Hello";
StringBuilder builder = new StringBuilder(str);
builder.reverse();
String result = builder.toString();
System.out.println(result);
olleH

" StringBuilderकक्षा के अलावा, जावा में एक और स्ट्रिंग-जैसी कक्षा है जिसे कहा जाता है StringBuffer। यह वर्ग का एक एनालॉग है StringBuilder, लेकिन इसकी विधियों को synchronizedसंशोधक के साथ चिह्नित किया गया है।"

"इसका क्या मतलब है?"

"इसका मतलब है कि StringBufferऑब्जेक्ट को एक साथ कई थ्रेड्स से एक्सेस किया जा सकता है।"

"मैं अभी तक धागे से बहुत परिचित नहीं हूं। लेकिन 'एकाधिक धागे से पहुंचा जा सकता है' 'एकाधिक धागे से पहुंचा नहीं जा सकता' से स्पष्ट रूप से बेहतर है ... हमेशा इसका उपयोग क्यों न करें? StringBuffer"

"क्योंकि यह की तुलना में बहुत धीमा है । जब आप जावा मल्टीथ्रेडिंग खोज StringBuilderमें सक्रिय रूप से मल्टीथ्रेडिंग का पता लगाना शुरू करते हैं तो आपको ऐसी कक्षा की आवश्यकता हो सकती है।

"मैं इसे अपनी स्मृति में लिखूंगा ताकि भूल न जाऊं। 'भविष्य के लिए' चिह्नित।