java - मैं स्ट्रिंगबिल्डर को कैसे साफ़ या खाली कर सकता हूं?




stringbuilder (6)

आपको sb.delete(0, sb.length()) या sb.setLength(0) उपयोग करना चाहिए और एक नया sb.setLength(0) नहीं बनाना चाहिए।

प्रदर्शन के लिए इस संबंधित पोस्ट को देखें: क्या एक लूप में स्ट्रिंगबिल्डर का पुन: उपयोग करना बेहतर है?

इस प्रश्न का उत्तर यहां दिया गया है:

मैं एक लूप में एक StringBuilder का उपयोग कर रहा हूं और प्रत्येक एक्स पुनरावृत्तियों को मैं इसे खाली करना चाहता हूं और एक खाली StringBuilder साथ शुरू करना चाहता हूं, लेकिन मुझे .NET StringBuilder.Clear समान कोई विधि नहीं दिखाई दे रही है। दस्तावेज़ में StringBuilder.Clear करें, केवल delete विधि अत्यधिक जटिल लगता है।

तो जावा में StringBuilder को साफ करने का सबसे अच्छा तरीका क्या है?


काम करने के दो तरीके:

  1. stringBuilderObj.setLength(0) प्रयोग करें।
  2. बफर को साफ़ करने के बजाय new StringBuilder() साथ एक नया आवंटित करें।

मैं sb.setLength(0); लिए वोट sb.setLength(0); न केवल इसलिए कि यह एक फ़ंक्शन कॉल है, लेकिन क्योंकि यह वास्तव में सरणी को किसी अन्य सरणी में कॉपी नहीं करता है जैसे sb.delete(0, builder.length()); । यह शेष वर्णों को 0 होने के लिए भरें और लंबाई चर को नई लंबाई में सेट करें।

आप here से मेरे बिंदु को setLength फ़ंक्शन और delete0 फ़ंक्शन पर मान्य करने के लिए उनके कार्यान्वयन पर एक नज़र डाल सकते हैं।


यदि आप स्ट्रिंगबिल्डर या स्ट्रिंगबफर के लिए स्रोत कोड देखते हैं तो setLength () कॉल केवल वर्ण सरणी के लिए अनुक्रमणिका मान को रीसेट करता है। सेट लम्बाई विधि का उपयोग कर IMHO हमेशा एक नए आवंटन से तेज़ होगा। उन्हें 'स्पष्ट' या 'रीसेट' विधि का नाम देना चाहिए था, इसलिए यह स्पष्ट होगा।


delete अत्यधिक जटिल नहीं है:

myStringBuilder.delete(0, myStringBuilder.length());

आप यह भी कर सकते हैं:

myStringBuilder.setLength(0);

setLength(0) को रीसेट करने या प्रत्येक पुनरावृत्ति में एक नया निर्माण करने के लिए setLength(0) का उपयोग करके मूल रूप से दो विकल्प होते हैं। उपयोग के आधार पर दोनों के पास पेशेवर और विपक्ष हो सकते हैं।

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

जब आप क्षमता को नहीं जानते हैं, तो उसी स्ट्रिंगबिल्डर का पुन: उपयोग करना तेज हो सकता है। प्रत्येक बार जब आप संलग्न करते समय क्षमता को पार करते हैं, तो एक नई बैकिंग सरणी आवंटित की जानी चाहिए और पिछली सामग्री की प्रतिलिपि बनाई जानी चाहिए। एक ही स्ट्रिंगबिल्डर का पुन: उपयोग करके, यह कुछ पुनरावृत्तियों के बाद आवश्यक क्षमता तक पहुंच जाएगा और उसके बाद कोई प्रतिलिपि नहीं होगी।






stringbuilder