الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

شرح : تمرير مصفوفة نصوص للأبلت

بدأه rohaili في 24 نوفمبر 2009 · 7 رد · 781 مشاهدة · في JavaEE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

الحمد لله رب العالمين والصلاة والسلام على أشرف الأنبياء والمرسلين وبعد.

لقد واجهتني مشكلة عدم القدرة على تمرير مصفوفة للأبلت ، وقد تمكنت بفضل الله من حلها باستخدام الدالتين التاليتين وأحببت أن أعرض هذا الحل عليكم .

أولا : نقوم بجمع عناصر المصفوفة في نص واحد فقط مع وضع فاصل بين عناصرها باستخدام الدالة التالية :


public String add(String[] data){
String s = "";
for( int i = 0; i < data.length; i++ ){
s += data;
s += "z:z";
}
return s;
}

ثم نمررها للأبلت كنص واحد فقط .

ملاحظة : يمكن استخدام أي نص كفاصل حتى لو كان من حرف واحد مثلا ":" ، ولكني أضفت حرف إنجليزي في أول الفاصل وآخره لأنني لا حظت أن عناصر المصفوفة لا يتم حفظها في النص بنفس الترتيب إذا كان أحد العناصر عبارة عن نص مكون من أرقام وعندما أضفت حرف انجليزي في أول الفاصل وآخره حلت هذه المشكلة .

ثانيا : فصل عناصر النص إلى مصفوفة نصوص باستخدام الفاصل السابق :


public String[] get(String s){
String[] data = s.split("z:z");
return data;
}

300_130.gif

#2

لا تستخدم العملية + على String

لأنها مكلفة جداً

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#3

جزاك الله خيرا .

ماذا يمكن استخدامه بدلا عنها ؟

تم تعديل هذه المشاركة بواسطة rohaili في 27 نوفمبر 2009 في 17:01

300_130.gif

#4

StringBuidler

#5

بناء على رأي المشرف علاء الصالحي بأن العملية + مكلفة جدا فقد تم استبدال الدالة concat() بالعملية + ، فتصبح الدالة المذكورة سابقا كالتالي :

public String add(String[] data){
 String s = "";
 for( int i = 0; i < data.length; i++ ){
 s = s.concat( data );
 s = s.concat( "z:z" );
 }
 return s;
 }

تم تعديل هذه المشاركة بواسطة rohaili في 4 ديسمبر 2009 في 14:47

300_130.gif

#6

نفس المشكلة أخ rohili

فالدالة concat

تقوم بنفس العمل تقريباً الحل الصحيح هنا استخدم StringBuilder كما أشار الأخ عصام

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#7
علاء الصالحي كتب:

نفس المشكلة أخ rohili

فالدالة concat

تقوم بنفس العمل تقريباً الحل الصحيح هنا استخدم StringBuilder كما أشار الأخ عصام

تحياتي

شكرا أخ علاء

للتوضيح اكثر

فإن ال String تقوم بإنشاء Objects زيادة.

مثال

String s = "a";
s+= "b";
s+= "c";

في النهاية سنحصل على String تحتوي على "abc"، اي كائن واحد.

لكن الواقع أن ال heap ستحتوي على 4 كائنات و ال s ستؤشر على الكائن الاخير, هذه الكائنات هي على الترتيب


b
ab
c
abc
a

بينما ال StringBuilder ستنشئ كائن واحد وتتعامل معه كأنه مصفوفة، فتتم عملية الاضافة على نفس الكائن بدون انشاء اخر.

فتصور انك ستنفذ ال

String+=

على 5000 مرة كم ستأخذ من الوقت وكم سينتج كائنات زيادة

شكرا اخ rohaili على عرض المشكلة والحل

2
#8

جزاكم الله خيرا .

وها هي الدالة بعد استبدال StringBuilder ب String


StringBuilder s = "";
for( int i = 0; i < data.length; i++ ){
s.append( data );
s.append( "z:z" );
}
return s.toString();
}
 public String add( String[] data ){

تم تعديل هذه المشاركة بواسطة rohaili في 5 ديسمبر 2009 في 17:09

1

300_130.gif

مواضيع مشابهة