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

دالة تستقبل محرف

بدأه khaled_prg في 3 يناير 2012 · 21 رد · 762 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

أريد معرفة اسم الدالة التي تستقبل محرف و تعيد رقم الخانة التي يوجد بها المحرف, تماما على عكس الدالة charAt, بانتظاركم يا إخوة.

شكرا لكم مسبقا.

تم تعديل هذه المشاركة بواسطة khaled_prg في 3 يناير 2012 في 01:24

#2

السلام عليكم ..

  1. indexOf
  2. مثال رابط
1

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#4

السلام عليكم ...

public class ST 
{ 
public static void main(String[] args) {
 	StringBuffer sb = new StringBuffer();
 	sb.append("Hello World");
 	int i = sb.toString().indexOf("r");
 	System.out.println(i);
  	}
 }

تعديل على المشاركة :

الصف StringBuffer فيه الــ Method المسمى indexOf دون الحاجة لتحويله إلى String , مثال :

public class ST
{
public static void main(String[] args)
{
    	StringBuffer sb = new StringBuffer();
    	sb.append("Hello World");
    	int i = sb.indexOf("r");
    	System.out.println(i);

}
}

تم تعديل هذه المشاركة بواسطة houssam11350_11350 في 4 يناير 2012 في 00:35

2

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#5

الله يسلمك أخوي, هذا ما كنت أبحث عنه بالضبط, لك جزيل الشكر.

بالمناسبة, هل الـ method ذات الإسم toString نستطيع من خلالها تطبيق دوال الصنف String على StringBuffer ؟

شكرا مرة أخرى.

#6

السلام عليكم ...

  1. لا شكر على واجب أخي ..
  2. نعم ما ذكرته صحيح .. فالــ method المسمى toString يقوم بإعادة كائن من الصنف String و بالتالي يمكن استخدام كل الــ Methods الموجودة في الصنف String عليها ..
  3. الــ Method المسمى toString معرف بالصنف الأب Object الذي هو الأب لكل الأصناف في الجافا و بالتالي كل الأصناف فيها toString (حسب مفهوم الوراثة) و لكن بعضها يقوم بإعادة تعريفها .. وهذا ما يسمى بالــ override ..
  4. رابط مفيد لبعص مفاهيم الجافا ..
1

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#7

جميل جدا, أحسنت.

طيب, ماذا عن العكس ؟؟

إذا أردنا تطبيق الــ methods الخاصة بالكلاس StringBuffer على الكلاس String ؟

احترامي لك.

تم تعديل هذه المشاركة بواسطة khaled_prg في 3 يناير 2012 في 16:02

#8

السلام عليكم ..

اقتباس
إذا أردنا تطبيق الــ methods الخاصة بالكلاس StringBuffer على الكلاس String ؟
.. لا يمكن ذلك ..كل كلاس يطبق الــ methods الخاصة به (و بآبائه فقط).. هذا هو مفهوم البرمجة غرضية التوجه Object-Oriented Programming ..

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#9
اقتباس
لا يمكن ذلك ..كل كلاس يطبق الــ methods الخاصة به (و بآبائه فقط).. هذا هو مفهوم البرمجة غرضية التوجه Object-Oriented Programming ..

أعرف ذلك :)

كنت أسأل عن ما إذا كانت هناك methode في الــ object الأب الخاص بالكلاس StringBuffer بحيث يمكننا من خلالها إعادة الكائن و استخدامه في الكلاس Stinrg

#10

السلام عليكم ..

  1. الصف StringBuffer يرث من الصف Object مباشرة .. و فيه الــ method المسمى toString الذي يعيد كائن من نوع String ...
  2. كل كائن نطبق عليه الــ Methods المعرفة فيه كما قلنا ..
  3. رابط التوثيق لــ StringBuffer
  4. اتمنى أن أكون فهمت سؤالك بشكل صحيح ..

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#11

السلام عليكم نقاش جميل

لكن عندي استفسار ما هو الفرق بين الصنف string وبين الصنف StringBuffer

يعني في عجالةواختصار

إذا نظــرتَ نيـوب اللـّيـثِ بـارزةً         فـلا تظــنَنَ أَنَّ اللـّيـــثَ يبْتسـِـــمُ


 


 


رسم المخططات البيانية بواسطة الجافا


 


كتاب تحليل وتصميم نظم المعلومات


#12

السلام عليكم

حسب ما فهمت من كلامكم فإن :

الــ Methode ذات الإسم toString مُعرفة في الصنف الأب String حيث تقوم هذه الــ Methode بتحويل سلسلة محارف من StringBuffer إلى String, بعد ذلك يمكننا استخدام أي Methode موجودة في الصنف String, مثال :

System.out.println(Min.toString().concat(" koukou"));

هلا كلامي صحيح ؟

بالمناسبة, قمت بوضع نفس الموضوع في منتدى developpez, و هذا الرابط لمن يريد الدخول في النقاش :

تم تعديل هذه المشاركة بواسطة khaled_prg في 3 يناير 2012 في 22:33

#13
اقتباس
السلام عليكم نقاش جميل

و عليكم السلام, مرحبا بك :)

اقتباس
ما هو الفرق بين الصنف string وبين الصنف StringBuffer

باختصار شديد : أي كائن تم إنشائه من طرف الكلاس String فهو غير قابل للتعديل على عكس الكلاس StringBuffer

بمعنى أنه لا يمكننا إضافة/حذف أحرف جديدة إلى/من سلسلة المحارف التي تم إنشائها من طرف الكلاس String, انظر المثال :

String s1 = "toto";
s1 = s1 + "encore toto";

الكود غير صحيح, لأنه لا يمكننا تغيير ما بداخل الــ object التابع للكلاس String, إذا أردنا إضافة أو حذف عناصر من الــ Object ذو الإسم s1 فيلزمنا التعامل مع الـ Methods مثل concat إذا أردنا دمج عدة سلاسل في آن واحد.

أما بالنسبة للصنف StringBuffer فيمكننا التعامل معه مباشرة لأنه قابل للتعديل .. أضف إلى ذلك أنه يملك مجموعة Methods تُمكننا من فعل ما نريد.

هذا رابط يشرح الفرق بين String,StringBuffer,StringBuilder :

تم تعديل هذه المشاركة بواسطة khaled_prg في 3 يناير 2012 في 22:51

1
#14

السلام عليكم ..

  1. تبين ان الصف StringBuffer فيه method تعيد الــ index الخاص بحرف(indexOf) .. دون الحاجة إلى تحويله إلى النوع String (و حجز المزيد من الذاكرة) .. و قمت بإضافة ذلك إلى مشاركتي السابقة ... (مع بقاء النص الأصلي للمشاركة دون تعديل .. (للمصداقية فقط)) ..
  2. الأخ vector_ever يسأل عن الفرق بين الــ String و الــ StringBuffer قام الأخ khaled_prg مشكورا بوضع رابط يوضح فيه ذلك ..و بعجالة أوضح الفرق .. ان الــ String في جافا هو class .. و بالتالي حجز أي كائن من النوع String يقوم المترجم بتحويله باستخدام الــ new ..أي عندما نكتب :
    String s = "Hello";

    فإن المترجم يقوم بترجمته إلى :

    String s = new String("Hello");

    لأنه كما هو معلوم لنا أن new هي التي تحجز مكان الكائن في الذاكرة (ياستثناء الأنماط البسيطة primitive) .. و بالتالي عند الحاجة لتعديل سلسلة نصية مثلا :

    s1 = s1 + "World";

    فإن المترجم يحوله إلى :

    s1 = new String(s1+"world");

    أي يقوم بحجز مكان جديد لــ S1 و يضع فيه القيمة الجديدة .. و هذا يسبب استهلاك كبير في الذكرة و بالتالي يؤثر على الأداء ...لذلك تم حل المشكلة بإيجاد الصف StringBuffer الذي يمكننا الإضافة و التغيير عليه دون أن يتم حجزه من جديد عند كل عملية تعديل (لا أعرف ما هي البنية الداخلية له .. ربما لوعدنا للكود المصدري للـ JDK ..لعرفنا ) ..

  3. اقتباس
    الــ Methode ذات الإسم toString مُعرفة في الصنف الأب String حيث تقوم هذه الــ Methode بتحويل سلسلة محارف من StringBuffer إلى String, بعد ذلك يمكننا استخدام أي Methode موجودة في الصنف String,
    فقط تصحيح : الــ Method المسمى toString معرفة بالصف Object الذي قلنا أنه الأب لكل صفوف الجافا و بالتالي حسب مفهوم الوراثة فإن كل صفوف الجافا فيها الــ method المسمى toString ..
1

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#15
اقتباس
تبين ان الصف StringBuffer فيه method تعيد الــ index الخاص بحرف(indexOf) .. دون الحاجة إلى تحويله إلى النوع String (و حجز المزيد من الذاكرة)

هذا ما كنت أناقشه قبل قليل مع أصدقاء لي في هذا الموضوع :

الصنف StringBuffer يحتوي على overloading للدالة indexOf بطريقتين, الأولي تستقبل فيها String أما الثانية فتستقبل فيها String و int, لاحظ أنه لا يوجد overloading للدالة indexOf بحيث تستقبل character وهنا تكمن المشكلة, لو افترضنا أن الحرف الذي ستستقبله الدالة غير معروف مُسبقا (أو سيتم أخذه من سلسلة محارف مستقلة), كيف ستعمل الــ indexOf الموجودة في الصنف StringBuffer ؟؟

مثال :

public class Nm_Position {
    public static void main(String args[]){
        StringBuffer mon_nom = new StringBuffer("Khaled_PRG");
        int nb_position;
        for(int i = 0;i <= mon_nom.length() - 1 ;i++)
        {
            nb_position = mon_nom.toString().indexOf(mon_nom.charAt(i));
            System.out.println("La position de "+mon_nom.charAt(i)+" égal à "+nb_position);
        }
    }
}

اقتباس
يقوم بحجز مكان جديد لــ S1 و يضع فيه القيمة الجديدة .. و هذا يسبب استهلاك كبير في الذكرة

إذا كان الأمر هكذا, ألا يجب علينا تحرير المساحة التي كانت تشغلها S1 ؟

اقتباس
الــ Method المسمى toString معرفة بالصف Object الذي قلنا أنه الأب لكل صفوف الجافا و بالتالي حسب مفهوم الوراثة فإن كل صفوف الجافا فيها الــ method المسمى toString ..

ماذا تقصد بــ "الصف الأب لكل صفوف الجافا" ؟

احترامي لك.

#16

السلام عليكم ..

  1. اقتباس
    لاحظ أنه لا يوجد overloading للدالة indexOf بحيث تستقبل character وهنا تكمن المشكلة
    هذا صحيح ...و بالتالي يوجد حل آخر .. هو تحويل الــ char إلى string كمايلي :
    public class Nm_Position {
    	public static void main(String args[]){
        	StringBuffer mon_nom = new StringBuffer("Khaled_PRG");
        	int nb_position;
        	for(int i = 0;i <= mon_nom.length() - 1 ;i++)
        	{
            	nb_position = mon_nom.indexOf(String.valueOf (mon_nom.charAt(i)));
            	System.out.println("La position de "+mon_nom.charAt(i)+" égal à "+nb_position);
        	}
    	}
    }

  2. اقتباس
    إذا كان الأمر هكذا, ألا يجب علينا تحرير المساحة التي كانت تشغلها S1 ؟
    الــ garbage collector يقوم بهذه المهمة .. حيث أن أماكن الذاكرة التي لا يشير إليها أحد يجب تحريرها .. و S1 اصبح يشير إلى قيمة جديدة (مكان جديد) و المكان القديم لا يشير إليه أحد ... و بالتالي يتم تحريره ... و لكن مشكلة الأداء تكمن أنه عند كل عملية تغير على النص , فإنه يتم حجز مكان جديد للنص الجديد كما قلنا ...
  3. اقتباس
    ماذا تقصد بــ "الصف الأب لكل صفوف الجافا" ؟
    كل الصفوف في جافا ترث من الصف Object سواء بشكل مباشر أو غير مباشر : رابط:
    Class Object is the root of the class hierarchy.  
     Every class has Object as a superclass. All objects,   including arrays, implement the methods of this class.

تم تعديل هذه المشاركة بواسطة houssam11350_11350 في 4 يناير 2012 في 02:40

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#17
اقتباس
يوجد حل آخر .. هو تحويل الــ char إلى string

نعم, هذه الطريقة أفضل لأن تحويل حرف واحد إلى String أفضل من تحويل كل السلسلة من StringBuffer إلى String

اقتباس
الــ garbage collector يقوم بهذه المهمة

سمعتُ عنه سابقا .. أذكر أنهم قالو أنه رجل طيب .. دائما ما ينظف الأوساخ :D

اقتباس
أماكن الذاكرة التي لا يشير إليها أحد يجب تحريرها

و لماذا لا يشير إليها مؤشر ؟؟

عند تغيير محتوى String سيتم إنشاء كائن جديد يحتوي على عنوان جديد مُرفق بالقيمة الجديدة لسلسلة المحارف و بالتالي العنوان القديم ما زال موجودا و يُشير إلى الكائن الأول.

اقتباس
كل الصفوف في جافا ترث من الصف Object سواء بشكل مباشر أو غير مباشر

لسوء الحظ, لا أعرف الإنجليزية, إذا كان لديك الرابط بالفرنسية فهذا جيد.

أو يمكنك ترجمة محتوى الرابط (محل الشاهد فقط, لو سمحت)

تحياتي.

#18

السلام عليكم ...

  1. اقتباس
    عند تغيير محتوى String سيتم إنشاء كائن جديد يحتوي على عنوان جديد مُرفق بالقيمة الجديدة لسلسلة المحارف و بالتالي العنوان القديم ما زال موجودا و يُشير إلى الكائن الأول.
    نعم .. العنوان القديم (اسمه الدقيق object) مازال موجودا و لكن الكائن S1 (اسمه الدقيق Reference) .. اصبح يشير إلى مكان جديد كما قلنا , و المكان القديم لم يعد S1 يشير إليه , لذلك يتم تحريره بواسطة Garbage Collector .
  2. اقتباس
    لسوء الحظ, لا أعرف الإنجليزية, إذا كان لديك الرابط بالفرنسية فهذا جيد.
    قمت باستخدام ترجمة جوجل :
    Objet de classe est la racine de la hiérarchie des classes.
      Chaque classe a des objets comme une superclasse. Tous les objets, y compris les tableaux, mettre en œuvre les méthodes de cette classe.

    و هذا رابط الترجمة (مشكلته أنه قام بترجمة الكلمات المفتاحية ايضا مثل publique و الصحيح public) .

  3. من الضروري على مبرمجي الجافا قراءة الــ Documentation الخاصة بلغة الجافا ..رابط , و لا أعرف إذا كان هناك نسخة بلغات أخرى منها (لا اعتقد أنه يوجد)...

بالتوفيق أخي ..

تم تعديل هذه المشاركة بواسطة houssam11350_11350 في 4 يناير 2012 في 03:43

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#19

مرحبا :)

اقتباس
العنوان القديم (اسمه الدقيق object) مازال موجودا و لكن الكائن S1 (اسمه الدقيق Reference) .. اصبح يشير إلى مكان جديد

بصراحة, لم أفهم الفرق بين الإثنين !! :blush:

حسب فهمي فإن :

  1. الكائن = الــ object
  2. المؤشر الذي يشير إلى الكائن = Reference

هل هذا صحيح ؟؟

اقتباس
مشكلته أنه قام بترجمة الكلمات المفتاحية ايضا مثل publique و الصحيح public

كنت أريد أن أرى ترجمة الفقرة الإنجليزية بالعربية نظرا لأن ترجمة جوجل غير دقيقة !

اقتباس
من الضروري على مبرمجي الجافا قراءة الــ Documentation الخاصة بلغة الجافا

أصبت, لهذا أتعلم الإنجليزية حاليا.

تحياتي.

#20

السلام عليكم ...

  • اقتباس
    حسب فهمي فإن :
    • الكائن = الــ object
    • المؤشر الذي يشير إلى الكائن = Reference
    بالضبط هذا صحيح ... و لو أنه في كثير من المراجع و الكتب .. تذكر كلمة object للدلالة على reference ..

  • اقتباس
    كنت أريد أن أرى ترجمة الفقرة الإنجليزية بالعربية نظرا لأن ترجمة جوجل غير دقيقة !
    ..إليك الترجمة ..
    اقتباس
    الصف Object هو الجذر لهرمية الصفوف ,
    الصف الأب لكل صف هو الصف Object ,
    كل الكائنات بما فيها المصفوفات تحقق إجرائيات هذا الصف .
  • اقتباس
    أصبت, لهذا أتعلم الإنجليزية حاليا.
    هذا جيد ... معظم المستندات و الأبحاث و المواقع الخاصة بعلوم الحاسب و البرمجة و تقنية المعلومات مكتوبة باللغة الإنكليزية ..بالتوفيق ..

تم تعديل هذه المشاركة بواسطة houssam11350_11350 في 4 يناير 2012 في 05:44

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

#21
اقتباس
الصف Object هو الجذر لهرمية الصفوف , الصف الأب لكل صف هو الصف Object , كل الكائنات بما فيها المصفوفات تحقق إجرائيات هذا الصف .

جميل جدا.

أشكرك أخي حسام على متابعة الموضوع و الرد السريع و إثراء النقاش و أرجو أن ألتقي بك قريبا في موضوع جديد.

دامت أناملك.

#22

مشكور أخي خالد ...نقاش رائع ..على أمل اللقاء في مواضيع جديدة ..

لا إله إلا الله ... محمد رسول الله

لو كانت مشاركتي مفيدة و تريد تشجيعي على المزيد من العطاء , فضلا قم بتقييم المشاركة

المعرًف القديم : houssam11350_11350

من مواضيعي : ArabGenCode : مولد كود و إجراءات مخزنة و واجهات لجداول سيكوال سيرفر

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