Menu
Coddy logo textTech

התאמת תבניות באמצעות Regex

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Java של Coddy. שיעור 47 מתוך 59.

המחלקות Pattern ו-Matcher מספקות כלים רבי עוצמה לפעולות עם ביטויים רגולריים ב-Java. ראשית, נבין כיצד להשתמש בהן:

צרו pattern באמצעות Pattern.compile():

Pattern pattern = Pattern.compile("cat");
// יוצר תבנית למציאת "cat"

צרו matcher עבור הטקסט שלכם:

String text = "The cat and dog";
Matcher matcher = pattern.matcher(text);
// יוצר matcher עבור הטקסט

עכשיו אפשר למצוא התאמות באמצעות matcher.find():

while (matcher.find()) {
   System.out.println("Found at: " + matcher.start());
}

לאחר הרצת הקוד שלמעלה, הפלט הוא: Found at: 4

הבנת המתודות:

  • matcher.find() - מחפשת את המופע הבא של התבנית בטקסט
    • מחזירה true אם נמצאה התאמה
    • מחזירה false אם לא נותרו התאמות נוספות
    • זו הסיבה שאנחנו משתמשים בה בלולאת while - כדי למצוא את כל המופעים
  • matcher.start() - מחזירה את האינדקס (המיקום) שבו מתחילה ההתאמה האחרונה שנמצאה באמצעות find()
    • בדוגמה שלנו, "cat" מתחילה באינדקס 4 בתוך "The cat and dog"
    • יש לקרוא לה לאחר קריאה מוצלחת ל־find()

דוגמה עם כמה התאמות:

Pattern pattern = Pattern.compile("cat");
Matcher matcher = pattern.matcher("cat and cat");
while (matcher.find()) {
   System.out.println("Found at: " + matcher.start());
}
// פלט:
// Found at: 0
// Found at: 8
challenge icon

אתגר

קל

צרו מתודה בשם findWords שמקבלת שני ארגומנטים:

  1. מחרוזת (text) שבה יש לחפש
  2. מחרוזת (word) שיש למצוא

המתודה צריכה:

  1. להשתמש ב-Pattern וב-Matcher כדי למצוא את כל המופעים של המילה
  2. להחזיר מחרוזת שמכילה את המיקומים שבהם המילה נמצאה
  3. להפריד בין המיקומים באמצעות רווחים

הודעות ההחזרה צריכות להיות:

  • אם קלט כלשהו הוא null: להחזיר "Invalid input"
  • אם המילה לא נמצאה: להחזיר "Not found"
  • אם נמצאה: להחזיר את המיקומים (לדוגמה, "4 10 15")

נסו בעצמכם

import java.util.Scanner;
import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class Main {
    public static String findWords(String text, String word) {
        // כתבו כאן את הקוד שלכם
    }
    
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String text = scanner.nextLine();
        String word = scanner.nextLine();
        
        if (text.equals("null")) text = null;
        if (word.equals("null")) word = null;
        
        System.out.println(findWords(text, word));
    }
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

תרגלו בעצמכם: קומפיילר Java אונליין