البرمجة

العمليات على السلاسل النصية في .NET

العمليات على السلاسل النصية في dot NET

تعتبر السلاسل النصية (Strings) من أهم أنواع البيانات في البرمجة، فهي تمثل نصوصاً يمكن أن تحتوي على مجموعة من الحروف أو الرموز. في بيئة البرمجة .NET، تقدم لغة C# العديد من العمليات القوية والمرنة على السلاسل النصية، مما يسهل التعامل مع النصوص في التطبيقات المتنوعة.

تعريف السلاسل النصية في .NET

في .NET، تعتبر السلاسل النصية من نوع String وهي عبارة عن كائن (Object) قابل للتغيير في الذاكرة. يتم تمثيل السلسلة النصية على أنها مجموعة من الحروف (Chars)، حيث يمكن لكل حرف أن يكون له قيمة عددية وفقاً لترميز الحروف (مثل Unicode). على الرغم من أن السلسلة النصية يمكن أن تتغير من حيث الطول، إلا أن السلسلة النصية نفسها لا يمكن تعديل الحروف الموجودة بداخلها بشكل مباشر، مما يعني أن أي عملية تعديل تؤدي إلى إنشاء سلسلة جديدة.

خصائص السلاسل النصية في .NET

  • الثبات: السلاسل النصية في .NET هي كائنات ثابتة (Immutable). بمعنى أنه عندما يتم تعديل السلسلة النصية، يتم إنشاء كائن جديد بدلاً من تعديل السلسلة الأصلية.

  • دعم Unicode: يدعم نوع String في .NET مجموعة واسعة من الحروف عبر ترميز Unicode، مما يتيح إمكانية التعامل مع النصوص بلغات مختلفة وأحرف خاصة بسهولة.

  • الطول: يمكن الحصول على طول السلسلة النصية باستخدام الخاصية Length، والتي تعيد عدد الأحرف الموجودة في السلسلة.

  • الوصول إلى الأحرف: يمكن الوصول إلى الأحرف الفردية في السلسلة النصية باستخدام الفهرس (Index) على غرار المصفوفات. فمثلاً، myString[0] تعيد أول حرف في السلسلة.

العمليات الأساسية على السلاسل النصية

توفر .NET مجموعة متنوعة من العمليات التي يمكن تنفيذها على السلاسل النصية، مثل البحث، والاستبدال، والتقسيم، والدمج، وغيرها.

  1. البحث في السلسلة النصية:

    • IndexOf: تُستخدم للبحث عن موضع أول ظهور لحرف أو سلسلة فرعية معينة. مثلاً، إذا أردت العثور على أول ظهور لحرف معين في السلسلة، يمكنك استخدام IndexOf.

    csharp
    string text = "Hello, world!"; int index = text.IndexOf('o'); // يعيد 4
    • LastIndexOf: تُستخدم للبحث عن آخر ظهور لحرف أو سلسلة فرعية في السلسلة النصية.

    csharp
    string text = "Hello, world!"; int index = text.LastIndexOf('o'); // يعيد 8
  2. الاستبدال والتعديل:

    • Replace: تُستخدم لاستبدال جزء من السلسلة النصية بجزء آخر.

    csharp
    string text = "Hello, world!"; string newText = text.Replace("world", "CSharp"); // النتيجة "Hello, CSharp!"
    • ToUpper و ToLower: لتحويل السلسلة النصية إلى حروف كبيرة أو صغيرة.

    csharp
    string text = "Hello, World!"; string upperText = text.ToUpper(); // "HELLO, WORLD!" string lowerText = text.ToLower(); // "hello, world!"
  3. التقسيم:

    • Split: تُستخدم لتقسيم السلسلة النصية إلى أجزاء بناءً على فاصل معين.

    csharp
    string text = "apple,banana,orange"; string[] fruits = text.Split(','); // النتيجة: ["apple", "banana", "orange"]
  4. الإضافة والدمج:

    • Concat: تُستخدم لدمج سلسلتين أو أكثر معاً لتكوين سلسلة نصية واحدة.

    csharp
    string text1 = "Hello"; string text2 = "World"; string combined = string.Concat(text1, " ", text2); // "Hello World"
    • Join: تُستخدم لدمج عناصر المصفوفات أو القوائم في سلسلة واحدة، مع تحديد فاصل بين العناصر.

    csharp
    string[] words = { "apple", "banana", "orange" }; string result = string.Join(", ", words); // "apple, banana, orange"
  5. التحقق من محتوى السلسلة:

    • Contains: تُستخدم للتحقق مما إذا كانت السلسلة النصية تحتوي على سلسلة فرعية معينة.

    csharp
    string text = "Hello, world!"; bool contains = text.Contains("world"); // true
    • StartsWith و EndsWith: للتحقق مما إذا كانت السلسلة تبدأ أو تنتهي بسلسلة معينة.

    csharp
    string text = "Hello, world!"; bool starts = text.StartsWith("Hello"); // true bool ends = text.EndsWith("world!"); // true

التعامل مع السلاسل النصية متعددة الأسطر

في بعض الأحيان، يحتاج المطورون إلى العمل مع سلاسل نصية تتضمن أسطر متعددة. .NET يوفر عدة طرق للتعامل مع هذه الحالات:

  • String.Concat أو +: يمكن استخدامها لإنشاء سلسلة نصية متعددة الأسطر.

    csharp
    string multiLineText = "First line\nSecond line\nThird line";
  • Environment.NewLine: يُستخدم لإضافة فاصل الأسطر الصحيح حسب بيئة التشغيل (مثلاً، على Windows هو \r\n، وعلى Linux و macOS هو \n).

    csharp
    string multiLineText = "First line" + Environment.NewLine + "Second line" + Environment.NewLine + "Third line";

تحسين الأداء في التعامل مع السلاسل النصية

على الرغم من أن السلاسل النصية هي نوع بيانات ثابت (Immutable)، يمكن أن يؤدي العمل المكثف عليها في بعض الأحيان إلى مشاكل في الأداء بسبب الحاجة إلى إنشاء كائنات جديدة عند كل تعديل. لحل هذه المشكلة، يمكن استخدام كائن StringBuilder، وهو عبارة عن نوع بيانات قابل للتعديل ويسمح بإجراء تغييرات متعددة على النصوص بدون إنشاء كائنات جديدة في الذاكرة في كل مرة.

  • StringBuilder: يُستخدم عندما تكون هناك حاجة لتنفيذ العديد من التعديلات على السلسلة النصية.

    csharp
    StringBuilder sb = new StringBuilder("Hello"); sb.Append(" World"); sb.Replace("World", "CSharp"); string finalText = sb.ToString(); // "Hello CSharp"

التعامل مع السلاسل النصية الفارغة

  • String.Empty: يُستخدم للإشارة إلى السلسلة النصية الفارغة. من الأفضل استخدام String.Empty بدلاً من "" لتجنب التسبب في إنشاء كائن جديد.

    csharp
    string emptyString = String.Empty;
  • التحقق من السلسلة الفارغة: للتحقق من أن السلسلة النصية ليست فارغة أو لا تحتوي على أحرف بيضاء فقط، يمكن استخدام الدالة IsNullOrWhiteSpace.

    csharp
    string text = " "; bool isEmpty = string.IsNullOrWhiteSpace(text); // true

استخدام السلاسل النصية مع الـ Regular Expressions

الـ Regular Expressions (التعبيرات العادية) هي أداة قوية للبحث والتعديل على النصوص وفقاً لنمط معين. في .NET، يمكن استخدام فئة Regex لتنفيذ عمليات البحث والاستبدال المعقدة على السلاسل النصية.

csharp
using System.Text.RegularExpressions; string text = "The price is 100 dollars."; string pattern = @"\d+"; // البحث عن الأرقام Match match = Regex.Match(text, pattern); if (match.Success) { Console.WriteLine("Found number: " + match.Value); // "100" }

الخاتمة

تعد السلاسل النصية من العناصر الأساسية في البرمجة، وتوفر لغة C# في بيئة .NET مجموعة غنية من الأدوات والوظائف التي تسهل التعامل مع النصوص. من العمليات الأساسية مثل البحث والتعديل إلى استخدام تقنيات أكثر تقدماً مثل التعبيرات العادية و StringBuilder لتحسين الأداء، تتيح .NET للمطورين القدرة على تنفيذ مجموعة واسعة من العمليات على السلاسل النصية بطريقة مرنة وفعالة.