العمليات على السلاسل النصية في dot NET
تعتبر السلاسل النصية (Strings) من أهم أنواع البيانات في البرمجة، فهي تمثل نصوصاً يمكن أن تحتوي على مجموعة من الحروف أو الرموز. في بيئة البرمجة .NET، تقدم لغة C# العديد من العمليات القوية والمرنة على السلاسل النصية، مما يسهل التعامل مع النصوص في التطبيقات المتنوعة.
تعريف السلاسل النصية في .NET
في .NET، تعتبر السلاسل النصية من نوع String وهي عبارة عن كائن (Object) قابل للتغيير في الذاكرة. يتم تمثيل السلسلة النصية على أنها مجموعة من الحروف (Chars)، حيث يمكن لكل حرف أن يكون له قيمة عددية وفقاً لترميز الحروف (مثل Unicode). على الرغم من أن السلسلة النصية يمكن أن تتغير من حيث الطول، إلا أن السلسلة النصية نفسها لا يمكن تعديل الحروف الموجودة بداخلها بشكل مباشر، مما يعني أن أي عملية تعديل تؤدي إلى إنشاء سلسلة جديدة.
خصائص السلاسل النصية في .NET
-
الثبات: السلاسل النصية في .NET هي كائنات ثابتة (Immutable). بمعنى أنه عندما يتم تعديل السلسلة النصية، يتم إنشاء كائن جديد بدلاً من تعديل السلسلة الأصلية.
-
دعم Unicode: يدعم نوع
Stringفي .NET مجموعة واسعة من الحروف عبر ترميز Unicode، مما يتيح إمكانية التعامل مع النصوص بلغات مختلفة وأحرف خاصة بسهولة. -
الطول: يمكن الحصول على طول السلسلة النصية باستخدام الخاصية
Length، والتي تعيد عدد الأحرف الموجودة في السلسلة. -
الوصول إلى الأحرف: يمكن الوصول إلى الأحرف الفردية في السلسلة النصية باستخدام الفهرس (Index) على غرار المصفوفات. فمثلاً،
myString[0]تعيد أول حرف في السلسلة.
العمليات الأساسية على السلاسل النصية
توفر .NET مجموعة متنوعة من العمليات التي يمكن تنفيذها على السلاسل النصية، مثل البحث، والاستبدال، والتقسيم، والدمج، وغيرها.
-
البحث في السلسلة النصية:
-
IndexOf: تُستخدم للبحث عن موضع أول ظهور لحرف أو سلسلة فرعية معينة. مثلاً، إذا أردت العثور على أول ظهور لحرف معين في السلسلة، يمكنك استخدام
IndexOf.
csharpstring text = "Hello, world!"; int index = text.IndexOf('o'); // يعيد 4-
LastIndexOf: تُستخدم للبحث عن آخر ظهور لحرف أو سلسلة فرعية في السلسلة النصية.
csharpstring text = "Hello, world!"; int index = text.LastIndexOf('o'); // يعيد 8 -
-
الاستبدال والتعديل:
-
Replace: تُستخدم لاستبدال جزء من السلسلة النصية بجزء آخر.
csharpstring text = "Hello, world!"; string newText = text.Replace("world", "CSharp"); // النتيجة "Hello, CSharp!"-
ToUpper و ToLower: لتحويل السلسلة النصية إلى حروف كبيرة أو صغيرة.
csharpstring text = "Hello, World!"; string upperText = text.ToUpper(); // "HELLO, WORLD!" string lowerText = text.ToLower(); // "hello, world!" -
-
التقسيم:
-
Split: تُستخدم لتقسيم السلسلة النصية إلى أجزاء بناءً على فاصل معين.
csharpstring text = "apple,banana,orange"; string[] fruits = text.Split(','); // النتيجة: ["apple", "banana", "orange"] -
-
الإضافة والدمج:
-
Concat: تُستخدم لدمج سلسلتين أو أكثر معاً لتكوين سلسلة نصية واحدة.
csharpstring text1 = "Hello"; string text2 = "World"; string combined = string.Concat(text1, " ", text2); // "Hello World"-
Join: تُستخدم لدمج عناصر المصفوفات أو القوائم في سلسلة واحدة، مع تحديد فاصل بين العناصر.
csharpstring[] words = { "apple", "banana", "orange" }; string result = string.Join(", ", words); // "apple, banana, orange" -
-
التحقق من محتوى السلسلة:
-
Contains: تُستخدم للتحقق مما إذا كانت السلسلة النصية تحتوي على سلسلة فرعية معينة.
csharpstring text = "Hello, world!"; bool contains = text.Contains("world"); // true-
StartsWith و EndsWith: للتحقق مما إذا كانت السلسلة تبدأ أو تنتهي بسلسلة معينة.
csharpstring text = "Hello, world!"; bool starts = text.StartsWith("Hello"); // true bool ends = text.EndsWith("world!"); // true -
التعامل مع السلاسل النصية متعددة الأسطر
في بعض الأحيان، يحتاج المطورون إلى العمل مع سلاسل نصية تتضمن أسطر متعددة. .NET يوفر عدة طرق للتعامل مع هذه الحالات:
-
String.Concat أو +: يمكن استخدامها لإنشاء سلسلة نصية متعددة الأسطر.
csharpstring multiLineText = "First line\nSecond line\nThird line"; -
Environment.NewLine: يُستخدم لإضافة فاصل الأسطر الصحيح حسب بيئة التشغيل (مثلاً، على Windows هو
\r\n، وعلى Linux و macOS هو\n).csharpstring multiLineText = "First line" + Environment.NewLine + "Second line" + Environment.NewLine + "Third line";
تحسين الأداء في التعامل مع السلاسل النصية
على الرغم من أن السلاسل النصية هي نوع بيانات ثابت (Immutable)، يمكن أن يؤدي العمل المكثف عليها في بعض الأحيان إلى مشاكل في الأداء بسبب الحاجة إلى إنشاء كائنات جديدة عند كل تعديل. لحل هذه المشكلة، يمكن استخدام كائن StringBuilder، وهو عبارة عن نوع بيانات قابل للتعديل ويسمح بإجراء تغييرات متعددة على النصوص بدون إنشاء كائنات جديدة في الذاكرة في كل مرة.
-
StringBuilder: يُستخدم عندما تكون هناك حاجة لتنفيذ العديد من التعديلات على السلسلة النصية.
csharpStringBuilder sb = new StringBuilder("Hello"); sb.Append(" World"); sb.Replace("World", "CSharp"); string finalText = sb.ToString(); // "Hello CSharp"
التعامل مع السلاسل النصية الفارغة
-
String.Empty: يُستخدم للإشارة إلى السلسلة النصية الفارغة. من الأفضل استخدام
String.Emptyبدلاً من""لتجنب التسبب في إنشاء كائن جديد.csharpstring emptyString = String.Empty; -
التحقق من السلسلة الفارغة: للتحقق من أن السلسلة النصية ليست فارغة أو لا تحتوي على أحرف بيضاء فقط، يمكن استخدام الدالة
IsNullOrWhiteSpace.csharpstring text = " "; bool isEmpty = string.IsNullOrWhiteSpace(text); // true
استخدام السلاسل النصية مع الـ Regular Expressions
الـ Regular Expressions (التعبيرات العادية) هي أداة قوية للبحث والتعديل على النصوص وفقاً لنمط معين. في .NET، يمكن استخدام فئة Regex لتنفيذ عمليات البحث والاستبدال المعقدة على السلاسل النصية.
csharpusing 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 للمطورين القدرة على تنفيذ مجموعة واسعة من العمليات على السلاسل النصية بطريقة مرنة وفعالة.

