سؤال

إذا كان عليك استخدام String.Replace() لاستبدال الاختبار 50 مرة، فيجب عليك إنشاء سلسلة جديدة 50 مرة.هل تقوم StringBuilder.Replace() بذلك بكفاءة أكبر؟على سبيل المثال، هل يجب علي استخدام StringBuilder إذا كنت سأستبدل الكثير من النص، حتى عندما لا أقوم بإلحاق أي بيانات به؟

أنا أستخدم .NET، ولكني أفترض أن هذا سيكون هو نفس لغة Java وربما لغات أخرى.

هل كانت مفيدة؟

المحلول

وهذا هو بالضبط نوع الشيء ب StringBuilder هو ل- تكرار تعديل الكائن النص نفسه - انها ليست مجرد سلسلة المتكررة، على الرغم من أن يبدو أن ما انها تستخدم للالأكثر شيوعا

.

نصائح أخرى

يعتمد ذلك على ما إذا كان حجم الاستبدال هو أكبر من السلسلة المستبدلة.

منشئ السلاسل over يخصص المخزن المؤقت الخاص به, ، في حين أن السلسلة تحتوي فقط على عدد الأحرف الموجودة فيها.

الخاصية StringBuilder.Capacity هي عدد الأحرف التي سيحتويها المخزن المؤقت، بينما StringBuilder.Length هي عدد الأحرف قيد الاستخدام.

عادةً يجب عليك تعيين StringBuilder.Capacity إلى قيمة أكبر من السلسلة الناتجة المتوقعة.وإلا فإن StringBuilder سيحتاج إلى إعادة تخصيص المخزن المؤقت الخاص به. عندما يقوم StringBuilder بإعادة تخصيص المخزن المؤقت الخاص به، فإنه يضاعف حجمه, ، وهو ما يعني أنه بعد إعادة تخصيص الزوجين، من المحتمل أن يكون أكبر بكثير مما يجب أن يكون، وتبدأ السعة الافتراضية عند 16.

من خلال تعيين قيمة السعة عند البدء (في المُنشئ على سبيل المثال)، يمكنك حفظ عمليات إعادة تخصيص المخزن المؤقت لـ StringBuilder.يمكنك استخدام StringBuilder.MaxCapacity للحد من السعة القصوى التي يمكن توسيع StringBuilder إليها.

نعم، هو. String.Replace دائما يخلق سلسلة جديدة - StringBuilder.Replace لا

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top