C# Programming

إزالة المسافات البيضاء بكفاءة في C#

Spread the love

إزالة المسافات البيضاء من السلاسل النصية مهمة شائعة في برمجة C#، غالبًا ما تكون ضرورية لتنظيف البيانات أو التحقق من صحتها أو معالجات السلاسل النصية الأخرى. تشتمل أحرف المسافة البيضاء على المسافات، والعلامات التبويب، وعلامات الأسطر الجديدة، وغيرها من الأحرف غير المرئية التي قد تؤثر على مقارنات السلاسل النصية ومعالجتها. توفر C# عدة طرق لإزالة المسافات البيضاء بكفاءة؛ تقارن هذه المقالة ثلاثة مناهج شائعة: استخدام Regex.Replace()، وString.Replace()، وطريقة Where() في LINQ، وتحليل أدائها وملاءمتها لسياقات مختلفة.

جدول المحتويات

إزالة المسافات البيضاء بكفاءة باستخدام Regex.Replace()

توفر طريقة Regex.Replace() حلاً مختصراً وعالي الكفاءة لإزالة جميع أحرف المسافة البيضاء، بغض النظر عن النوع. توفر التعبيرات النمطية مطابقة أنماط مرنة، مما يجعلها مثالية للتعامل مع أحرف المسافة البيضاء المختلفة في وقت واحد.


using System;
using System.Text.RegularExpressions;

public class RemoveWhitespace
{
    public static string RemoveWhitespaceRegex(string input)
    {
        return Regex.Replace(input, @"s+", "");
    }

    public static void Main(string[] args)
    {
        string text = " This  string   contains t multiple   whitespaces. n";
        string result = RemoveWhitespaceRegex(text);
        Console.WriteLine($"Original: {text}");
        Console.WriteLine($"Result: {result}");
    }
}

يتطابق التعبير النمطي s+ مع حرف واحد أو أكثر من أحرف المسافة البيضاء. يؤدي الاستبدال بسلسلة فارغة إلى إزالتها بشكل فعال. ينبع كفاءة هذه الطريقة من الطبيعة المحسّنة لمحركات التعبيرات النمطية، وهي مفيدة بشكل خاص للسلاسل النصية الكبيرة.

إزالة المسافات البيضاء باستخدام String.Replace()

توفر طريقة String.Replace() نهجًا أبسط وأكثر قابلية للقراءة، ولكن تتناقص كفاءتها عند التعامل مع أنواع متعددة من المسافات البيضاء. يتطلب إزالة جميع المسافات البيضاء إجراء عدة مكالمات إلى String.Replace()، واحدة لكل نوع (مسافة، علامة تبويب، سطر جديد، إلخ).


using System;

public class RemoveWhitespace
{
    public static string RemoveWhitespaceStringReplace(string input)
    {
        string result = input.Replace(" ", "");
        result = result.Replace("t", "");
        result = result.Replace("n", "");
        result = result.Replace("r", ""); // Carriage return
        return result;
    }

    public static void Main(string[] args)
    {
        string text = " This  string   contains t multiple   whitespaces. n";
        string result = RemoveWhitespaceStringReplace(text);
        Console.WriteLine($"Original: {text}");
        Console.WriteLine($"Result: {result}");
    }
}

على الرغم من بساطتها، تصبح هذه الطريقة مرهقة مع العديد من أنواع المسافات البيضاء وأقل كفاءة من Regex.Replace() للسلاسل النصية الكبيرة بسبب تكرار تكرار السلاسل النصية.

إزالة المسافات البيضاء باستخدام طريقة Where() في LINQ

توفر طريقة Where() في LINQ نهجًا وظيفيًا، حيث تقوم بتصفية الأحرف بناءً على ما إذا كانت مسافات بيضاء. غالبًا ما يكون هذا النهج أكثر قابلية للقراءة ولكنه بشكل عام أقل كفاءة من Regex.Replace()، خاصةً بالنسبة للسلاسل النصية الكبيرة.


using System;
using System.Linq;

public class RemoveWhitespace
{
    public static string RemoveWhitespaceWhere(string input)
    {
        return new string(input.Where(c => !char.IsWhiteSpace(c)).ToArray());
    }

    public static void Main(string[] args)
    {
        string text = " This  string   contains t multiple   whitespaces. n";
        string result = RemoveWhitespaceWhere(text);
        Console.WriteLine($"Original: {text}");
        Console.WriteLine($"Result: {result}");
    }
}

تكرر هذه الكود من خلال كل حرف، مع الاحتفاظ فقط بالأحرف غير الفراغات البيضاء. على الرغم من وضوحها وإيجازها، إلا أن عبء عمليات LINQ يؤثر على الأداء، خاصةً في السلاسل النصية الكبيرة.

مقارنة الأداء والتوصيات

للحصول على أداء مثالي، خاصةً مع السلاسل النصية الكبيرة أو أحرف المسافة البيضاء المتنوعة، يُوصى عمومًا باستخدام Regex.Replace(). فهي توازن بين الإيجاز وقابلية القراءة والسرعة. تُعد String.Replace() مناسبة لإزالة أحرف المسافة البيضاء المحددة والمعروفة فقط. توفر طريقة Where() في LINQ قابلية للقراءة لكنها تضحي بالأداء. يعتمد الخيار الأفضل على الاحتياجات الخاصة وحجم تطبيقك.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *