ביטויים רגילים ו ים + ב- Java

1. סקירה כללית

החלפת מחרוזות היא פעולה סטנדרטית כאשר אנו מעבדים מחרוזות בג'אווה.

תודה למועיל החלף הכל() שיטה ב חוּט בכיתה, אנחנו יכולים לעשות בקלות החלפת מחרוזות בביטויים רגולריים. עם זאת, לפעמים הביטויים יכולים לבלבל, למשל, \ s ו \ s +.

במדריך קצר זה, נבחן את ההבדל בין שני הביטויים הרגולריים באמצעות דוגמאות.

2. ההבדל בין \ s ו \ s +

הביטוי הקבוע \ s הוא מעמד אופי מוגדר מראש. זה מציין תו לבן יחיד. בואו נסקור את קבוצת הדמויות הלבנות:

[\ t \ n \ x0B \ f \ r]

סימן הפלוס + הוא מכמת חמדן, שמשמעותו פעם אחת או יותר. למשל ביטוי X + תואם אחד או יותר איקס תווים.

לָכֵן, הביטוי הקבוע \ s תואם תו לבן יחיד, ואילו \s + יתאים לדמות אחת או יותר.

3. החלף הכל() עם החלפה שאינה ריקה

למדנו את המשמעויות של ביטויים רגולריים \ s ו \ s +.

עכשיו, בואו נסתכל איך החלף הכל() השיטה מתנהגת אחרת עם שני הביטויים הרגולריים הללו.

נשתמש במחרוזת כטקסט הקלט לכל הדוגמאות:

מחרוזת INPUT_STR = "טקסט עם רווחים לבנים!";

בוא ננסה לעבור \ s אל ה החלף הכל() שיטה כטיעון:

תוצאת מחרוזת = INPUT_STR.replaceAll ("\ s", "_"); assertEquals ("טקסט ___ עם _____ רווחים לבנים! ___", תוצאה);

ה החלף הכל() שיטה מוצאת תווים לבנים בודדים ומחליפה כל התאמה בקו תחתון. יש לנו אחד עשר תווים לבנים בטקסט הקלט. לפיכך, אחד עשר מחליפים יתרחשו.

לאחר מכן, בוא נעביר את הביטוי הרגולרי \ s + אל ה החלף הכל() שיטה:

תוצאת מחרוזת = INPUT_STR.replaceAll ("\ s +", "_"); assertEquals ("Text_With_Whitespaces! _", תוצאה);

בגלל הכמת החמדן +, ה החלף הכל() השיטה תתאים לרצף הארוך ביותר של תווים לבנים רציפים ותחליף כל התאמה בקו תחתון.

בטקסט הקלט שלנו, יש לנו שלושה רצפים של תווים לבנים רציפים. לכן, כל אחד מהשלושה יהפוך לקו תחתון.

4. החלף הכל() עם החלפה ריקה

שימוש נפוץ נוסף של החלף הכל() השיטה היא להסיר דפוסים תואמים מטקסט הקלט. בדרך כלל אנו עושים זאת על ידי העברת מחרוזת ריקה כתחליף לשיטה.

בואו נראה איזו תוצאה נקבל אם נסיר תווים לבנים באמצעות ה- החלף הכל() שיטה עם \ s הבעה רגילה:

מחרוזת result1 = INPUT_STR.replaceAll ("\ s", ""); assertEquals ("TextWithWhitespaces!", result1);

עכשיו נעביר את הביטוי הרגולרי האחר \ s + אל ה החלף הכל() שיטה:

מחרוזת result2 = INPUT_STR.replaceAll ("\ s +", ""); assertEquals ("TextWithWhitespaces!", result2); 

מכיוון שההחלפה היא מחרוזת ריקה, השניים החלף הכל() שיחות מייצרות את אותה תוצאה, למרות שלשני הביטויים הרגולריים יש משמעויות שונות:

assertEquals (result1, result2);

אם נשווה בין השניים החלף הכל() שיחות, זו עם \ s + יעיל יותר. הסיבה לכך היא שהיא עושה את העבודה עם שלושה החלפות בלבד בזמן השיחה עם \ s יעשה אחד עשר מחליפים.

5. מסקנה

במאמר קצר זה למדנו על הביטויים הרגולריים \ s ו \ s +.

ראינו גם איך החלף הכל() השיטה התנהגה אחרת עם שני הביטויים.

כמו תמיד, הקוד זמין ב- GitHub.


$config[zx-auto] not found$config[zx-overlay] not found