התאמת תבניות באמצעות 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אתגר
קלצרו מתודה בשם findWords שמקבלת שני ארגומנטים:
- מחרוזת (
text) שבה יש לחפש - מחרוזת (
word) שיש למצוא
המתודה צריכה:
- להשתמש ב-Pattern וב-Matcher כדי למצוא את כל המופעים של המילה
- להחזיר מחרוזת שמכילה את המיקומים שבהם המילה נמצאה
- להפריד בין המיקומים באמצעות רווחים
הודעות ההחזרה צריכות להיות:
- אם קלט כלשהו הוא 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));
}
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1מערכים רב־ממדיים
יסודות מערכים דו־ממדייםגישה לאיברים במערך דו־ממדילולאות מקוננות עם מערכים דו־ממדייםסיכום — מערכים דו־ממדייםחיבור וחיסור מטריצותמערכים מדורגיםמערכים תלת־ממדיים ומעבר להםתבניות נפוצות במערכים דו־ממדייםסיכום — כל מה שצריך לדעת על מערכים5HashSet חלק 2
מתמטיקה - איחוד של HashSetsמתמטיקה - חיתוך של HashSetמתמטיקה - הפרש קבוצותמתמטיקה - הפרש סימטריתת־קבוצות וקבוצות־עלמעבר על קבוצות8פעולות מתקדמות על מחרוזות
יסודות StringBuilderמבוא ל-StringBufferיסודות ביטויים רגולרייםהתאמת תבניות באמצעות RegexStringTokenizerעיצוב מחרוזות מתקדםתרגלו בעצמכם: קומפיילר Java אונליין