ספירת התרחשויות של צ'ר במחרוזת

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

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

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

2. שימוש ב- Core Java Lib

2.1. גישה חובה

מפתחים מסוימים עשויים להעדיף להשתמש ב- Java הליבה. ישנן דרכים רבות לספור את מספר המופעים של מחרוזת במחרוזת.

נתחיל בגישה פשוטה / נאיבית:

מחרוזת someString = "פיל"; char someChar = 'e'; ספירת int = 0; עבור (int i = 0; i <someString.length (); i ++) {if (someString.charAt (i) == someChar) {count ++; }} assertEquals (2, count);

באופן לא מפתיע זה יעבוד, אבל - גם לא במפתיע - יש דרכים טובות יותר לעשות זאת.

2.2. באמצעות רקורסיה

פתרון פחות ברור, אך עדיין מעניין הוא להשתמש ברקורסיה:

ספירת פרטיות סטטית פרטיתOccurences (String someString, charSearchChar, int index) {if (index> = someString.length ()) {return 0; } int count = someString.charAt (index) ==SearchChar? 1: 0; ספירת החזרות + ספירהאקרונות (someString, חיפוש צ'אר, אינדקס + 1); }

אנו יכולים להפעיל שיטה רקורסיבית זו באופן הבא: useRecursionToCountChars ("פיל", 'ה', 0)

2.4. שימוש בביטויים רגולריים

דרך אחרת תהיה שימוש בביטויים רגולריים:

תבנית תבנית = תבנית.קומפילציה ("[^ e] * e"); התאמת התאמה = דפוס. התאמה ("פיל"); ספירת int = 0; בעוד (matcher.find ()) {count ++; } assertEquals (2, count);

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

2.5. שימוש בתכונות Java 8

תכונות חדשות הזמינות ב- Java 8 יכולות להועיל מאוד כאן.

בואו נשתמש בזרמים ולמבדות כדי ליישם את הספירה:

מחרוזת someString = "פיל"; ספירה ארוכה = someString.chars (). מסנן (ch -> ch == 'e'). ספירה (); assertEquals (2, count); count count2 = someString.codePoints (). filter (ch -> ch == 'e'). count (); assertEquals (2, count2);

אז ברור שזה פתרון נקי וקריא יותר באמצעות ספריית הליבה.

3. שימוש בספריות חיצוניות

בואו נסתכל על כמה פתרונות המשתמשים בכלי עזר מספריות חיצוניות.

3.1. באמצעות StringUtils

באופן כללי, תמיד עדיף להשתמש בפתרון קיים במקום להמציא את משלנו. ה commons.lang.StringUtils השיעור מספק לנו את countMatches () שיטה, שבה ניתן להשתמש לספירת תווים או אפילו מחרוזות משנה הנתונות חוּט.

ראשית, עלינו לכלול את התלות המתאימה:

 org.apache.commons commons-lang3 3.5 

אנו יכולים למצוא את הגרסה האחרונה ב- Maven Central.

בוא נשתמש כעת countMatches () כדי לספור את מספר התווים 'e' במחרוזת "הפיל" מילולית:

int count = StringUtils.countMatches ("פיל", "e"); assertEquals (2, count);

3.2. באמצעות גויאבה

גויאבה יכולה גם להועיל בספירת תווים. עלינו להגדיר את התלות:

 com.google.guava גויאבה 21.0 

אנו יכולים למצוא את הגרסה האחרונה ב- Maven Central.

בואו נראה כיצד גויאבה יכולה לעזור לנו במהירות לספור תווים:

int count = CharMatcher.is ('e'). countIn ("פיל"); assertEquals (2, count);

3.3. שימוש באביב

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

int count = StringUtils.countOccurrencesOf ("פיל", "e"); assertEquals (2, count);

4. מסקנה

במדריך מהיר זה התמקדנו בדרכים שונות לספור תווים במחרוזת. חלקם תוכננו אך ורק בג'אווה; חלקן דרשו ספריות נוספות.

ההמלצה שלנו היא להשתמש בכלי עזר קיימים מ StringUtils, גויאבה או אביב. עם זאת, אם מעדיפים להשתמש רק בג'אווה רגילה, מאמר זה מציע כמה אפשרויות להשיג בדיוק את זה עם Java 8.

קוד המקור השלם עבור דוגמאות אלה זמין בפרויקט GitHub זה.