Programming Basics SQL HTML CSS JavaScript React Python C++ Java JavaFX Swing Problem Solving English English Conversations Computer Fundamentals Linux Learn Typing

Javaالدالة appendReplacement() و الدالة appendTail() في جافا

تعريفهم

appendReplacement(): هذه الدالة تبدأ عملية تبديل محتوى محدد في النص كلما وجدته بمحتوى جديد.
فهي تبدل المحتوى الذي تم إيجاده في النص بمحتوى جديد و ترجع النص كله مع التبديل ككائن نوعه StringBuffer.
كما أنها تعتمد على الدوال find() و start() و end() عندما تبحث عن المحتوى الذي سيتم تبديله.
و هي تستفيد من الدوال start() و end() لمعرفة أين يبدأ و أين ينتهي المحتوى الذي سيتم تبديله في النص.
الدالة find() نستخدمها للبحث عن كل تطابق موجود في النص.
ملاحظة: الدالة appendReplacement() لا تضيف بقية النص الموجودة بعد آخر مرة تم فيها إيجاد تطابق.

appendTail(): هذه الدالة تكمل عملية تبديل محتوى النص بمحتوى جديد.
هي تقوم فقط بإضافة النص العادي الموجود بعد آخر مرة تم فيها تبديل القيمة.
هذه الدالة تُستدعى بعد إستدعاء الدالة appendReplacement() بالترتيب حتى تضيف باقي المحتوى على الـ StringBuffer.



بناؤهم

public Matcher appendReplacement(StringBuffer sb, String replacement)

public StringBuffer appendTail(StringBuffer sb)


أخطاء محتملة

  • IllegalStateException: في حال لم تجد الدالة appendReplacement() أي تطابق في النص, أو في حال حدث خطأ في التطابق السابق.
  • IllegalArgumentException: في حال لم تجد الدالة appendReplacement() الـ Pattern التي تشير لمجموعة.
  • IndexOutOfBoundsException: في حال لم تجد الدالة appendReplacement() الـ Pattern التي تشير لمجموعة.


مثال

Main.java
import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
public class Main {
 
    public static void main(String[] args) {
 
        String REGEX = "dog";                                                     // REGEX: هو النص الذي سنبحث عنه
        String INPUT = "I have one dog, my friend have two dogs and one bird.";   // INPUT: هو النص الذي سنبحث فيه
 
        Pattern p = Pattern.compile(REGEX);     // Pattern ثم قمنا بتخزينه في كائن نوعه compile() باستخدام الدالة Pattern إلى REGEX قمنا بتحويل الـ
 
        Matcher m = p.matcher(INPUT);           // Matcher ثم قمنا بتخزينه في كائن نوعه INPUT على النص matcher() قمنا باستدعاء الدالة
 
        StringBuffer sb = new StringBuffer();   // لتخزين النص الذي سيحتوي على النسخة التي تم تبديلها StringBuffer قمنا بإنشاء كائن نوعه
 
        while ( m.find() )                      // سيبحث عن التطابق التالي INPUT موجود في الـ Pattern هنا طالما أن الـ
        {
            m.appendReplacement(sb, "cat");     // هنا بدأنا عملية التبديل
        }
 
        m.appendTail(sb);                       // هنا قمنا بإتمام عملية التبديل
 
        System.out.println( sb.toString() );    // sb هنا قمنا بعرض قيمة النص التي تم تبديلها و تخزينها في الكائن
 
    }
 
}

سنحصل على النتيجة التالية عند التشغيل.

I have one cat, my friend have two cats and one bird.

شرح الكود

هنا كان الهدف تبديل الكلمة dog بالكلمة cat.


لو لم تستدعي الدالة appendTail() على الكائن m لكان ظهر محتوى النص الجديد ناقصاً.

أي لو قمت بمسح الكود m.appendTail(sb); الموجود في السطر 22, ستحصل على النتيجة التالية عند التشغيل.

I have one cat, my friend have two cat