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