تلخص الأمثلة الموجودة في هذه المقالة استخدام السلاسل في Java. شاركها مع الجميع لتكون مرجعا لك. التحليل المحدد هو كما يلي:
جوهر السلسلة هو مصفوفة من نوع char، ولكن في Java، جميع السلاسل التي تم تعريفها بعلامات اقتباس مزدوجة "" هي كائنات من فئة السلسلة. يعكس هذا أيضًا خصائص لغة Java الموجهة للكائنات تمامًا.
فئة السلسلة
1. يمثل كائن فئة السلسلة سلسلة ثابتة. وهو ذو طول غير قابل للتغيير. بمعنى آخر، بمجرد إنشاء مثيل لفئة السلسلة، لا يمكن تغيير السلسلة التي يمثلها هذا المثيل. مماثلة ل
str = str + "مرحبًا";
تقوم هذه العملية بشكل أساسي بإنشاء كائن سلسلة جديد من خلال الجمع بين كائني السلسلة str و"Hello"، ثم تعيين مرجع كائن السلسلة الجديد إلى str. يمكن أن يؤدي الاستخدام المكثف لهذه العملية إلى حدوث عيوب في الأداء. إذا كنت بحاجة إلى تغيير محتوى السلسلة بشكل متكرر، فيجب عليك استخدام فئة StringBuffer أو فئة StringBuilder. يمكننا استخدام برنامج صغير لمعرفة حجم الفرق في الأداء بين فئتي String وStringBuffer.
class StringTest { public static void main(String[] args) { /** * تنفيذ 10000 عملية إلحاق باستخدام كائنات String وكائنات StringBuffer على التوالي * وقت تنفيذ الاختبار * 2013.3.18 */ String constStr = ""; currentTimeMillis(); for(int i = 0; i < 10000; ++i) constStr += i; System.out.println("Const String:"+(System.currentTimeMillis()-lTime)); StringBuilder strBuf = new StringBuilder(""); for(int i = 0 ; i < 10000 ; ++i) strBuf.append(String.valueOf(i)); System.out.println("Buffered السلسلة: "+(System.currentTimeMillis()-lTime)); } }نتيجة التنفيذ:
يمكن ملاحظة أن StringBuilder يستغرق ثوانٍ، لكن فئة String تستغرق 300 مللي ثانية، مما يوضح الفرق الكبير في الأداء.
يمثل كل من StringBuilder وStringBuffered كائن سلسلة متغير الطول (قابل للتغيير). الفرق بينهما هو أن فئة StringBuffered تقوم ببعض المعالجة الآمنة من حيث مزامنة الخيط، بينما تقوم StringBuilder بالعكس. لذا، إذا كنت تبرمج في سطر واحد فقط، فإن StringBuilder يكون أكثر كفاءة قليلًا من StringBuffered (في الواقع الفرق ليس كبيرًا)
2. "Hello World" هو كائن سلسلة يمكننا استخدام "Hello World" مباشرة ككائن، مثل:
if("Hello".equals("Hello")) System.out.println("Yes");نتيجة الإخراج هي نعم.
3. عند مقارنة كائنات السلسلة، يجب عليك استخدام طريقة يساوي () بدلاً من مجرد استخدام == للحكم. نظرًا لأن == يقارن ما إذا كانت المثيلات المشار إليها بواسطة اسمين مرجعيين متماثلين، فإن طريقة يساوي () تقارن ما إذا كانت السلاسل الموجودة في الكائنين متساوية.
السؤال الشائع هو، كم عدد كائنات السلسلة التي ينشئها مقتطف التعليمات البرمجية التالي إجمالاً؟
String str1 = new String("Hello");String str2 = new String("Hello");ربما يجيب معظم الناس، 2. ولكن في الواقع، يتم إنشاء إجمالي 3 كائنات سلسلة هنا. بالإضافة إلى str1 وstr2، لا تنس أن "Hello" هو أيضًا كائن سلسلة.
4. تجمع السلسلة (تجمع)
تحتفظ Java بمجمع سلسلة عند التنفيذ. عندما تظهر سلسلة معلنة بعلامات اقتباس مزدوجة، سيتحقق JVM أولاً مما إذا كان كائن السلسلة نفسه (بنفس الأحرف) موجودًا في الذاكرة، وإذا كان موجودًا، فسوف يُرجع مرجعًا إلى الكائن الموجود بالفعل في الذاكرة إنه غير موجود، وسوف يقوم بإنشائه كائن سلسلة جديد. وهذا يحفظ الذاكرة. كما هو موضح في الجزء التالي من التعليمات البرمجية، تشير str1 وstr2 في الواقع إلى نفس كائن السلسلة.
String str1 = "Hello";String str2 = "Hello";
5. تلقي معلمات سطر الأوامر
عندما نعلن عن الطريقة الرئيسية، نعلن عن معلمة رسمية من النوع String[]. تقوم هذه المصفوفة من كائنات السلسلة بتخزين معلمات سطر الأوامر التي يمررها المستخدم عند تنفيذ هذا البرنامج. لاحظ أنه على عكس لغة C، تبدأ معلمات سطر الأوامر في Java من المتغير الأول بعد اسم البرنامج. بمعنى آخر، لا تتضمن بيانات السلسلة [] اسم التطبيق. على سبيل المثال:
class strCmd { public static void main(String[] args) { if(args.length > 0) { for(String str : args) System.out.println(str);الإخراج عند تنفيذ Java strCmd Hello World!
6. فصل الخيوط
على غرار strtok في لغة C، تحتوي فئة String أيضًا على طريقة تقسيم يمكنها فصل سلسلة بتنسيق محدد. تقوم طريقة التقسيم بإرجاع مصفوفة من كائنات السلسلة، التي تمثل كل سلسلة منفصلة. يحب:
class strSplit { public static void main(String[] args) { String str = "Hello/tWorld/tI/tLove/tYou!"; str.split("/t"); for(String s : strArr) System.out.println(s);من بينها، يمكن أن تكون معلمات طريقة الانقسام () تعبيرات عادية. يمكنك استخدام الطريقة الثابتة match() لفئة Matcher في الحزمة java.util لتحديد ما إذا كانت السلسلة تتطابق مع التعبير العادي.
تحتوي فئة String على العديد من الوظائف القوية الأخرى، ويجب أن نتعلم قراءة وثائق API. وهنا تتجلى أهمية اللغة الإنجليزية...
آمل أن تكون هذه المقالة مفيدة لبرمجة جافا للجميع.