קבל Substring מחרוזת ב- Java

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

במדריך מהיר זה נתמקד בפונקציונליות המיתרים של מיתרים בג'אווה.

בעיקר נשתמש בשיטות מה- חוּט בכיתה ומעטים מאפצ'י קומונס StringUtils מעמד.

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

טקסט מחרוזת = "ג'וליה אוונס נולדה בתאריך 25-09-1984." + "כיום היא גרה בארה"ב (ארצות הברית של אמריקה).";

2. יסודות של סובסטרינג

נתחיל בדוגמה מאוד פשוטה כאן - חילוץ תשתית עם אינדקס ההתחלה:

assertEquals ("ארה"ב (ארצות הברית של אמריקה).", text.substring (67));

שימו לב כיצד חילצנו את ארץ מגוריה של ג'וליה בדוגמה שלנו כאן.

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

בוא נעשה את זה ונפטר מהנקודה הנוספת הזו בסוף, בדוגמה שלמעלה:

assertEquals ("ארה"ב (ארצות הברית של אמריקה)", text.substring (67, text.length () - 1));

בדוגמאות לעיל השתמשנו במיקום המדויק כדי לחלץ את המצע.

2.1. קבלת מיתרת מתחילה מדמות ספציפית

במקרה שצריך לחשב את המיקום באופן דינמי על פי דמות או חוּט אנחנו יכולים לעשות שימוש ב- אינדקס של שיטה:

assertEquals ("ארצות הברית של אמריקה", text.substring (text.indexOf ('(') + 1, text.indexOf (')')));

שיטה דומה שיכולה לעזור לנו לאתר את המצע שלנו היא lastIndexOf. בואו נשתמש lastIndexOf לחלץ את השנה "1984". החלק של הטקסט בין המקף האחרון לנקודה הראשונה:

assertEquals ("1984", text.substring (text.lastIndexOf ('-') + 1, text.indexOf ('.')));

שניהם אינדקס של ו lastIndexOf יכול לקחת דמות או א חוּט כפרמטר. בואו נחלץ את הטקסט "ארה"ב" ואת שאר הטקסט בסוגריים:

assertEquals ("ארה"ב (ארצות הברית של אמריקה)", text.substring (text.indexOf ("ארה"ב"), text.indexOf (')') + 1));

3. שימוש תת רצף

ה חוּט class מספק שיטה אחרת הנקראת תת רצף שפועל בדומה ל סובסטרינג שיטה.

ההבדל היחיד הוא שהוא מחזיר א CharSequence במקום חוּט וניתן להשתמש בו רק עם אינדקס התחלה וסיום ספציפי:

assertEquals ("ארה"ב (ארצות הברית של אמריקה), text.subSequence (67, text.length () - 1));

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

ביטויים קבועים יבואו לעזרתנו אם עלינו לחלץ תשתית התואמת לדפוס ספציפי.

בדוגמה חוּט, תאריך הלידה של ג'וליה הוא במתכונת "dd-mm-yyyy". אנו יכולים להתאים לדפוס זה באמצעות ממשק ה- API לביטוי רגיל של Java.

קודם כל, עלינו ליצור דפוס עבור "dd-mm-yyyy":

תבנית תבנית = תבנית. קומפילציה ("\ ד {2} - \ ד {2} - \ ד {4}");

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

התאמת התאמה = דפוס. התאמה (טקסט);

לאחר התאמה מוצלחת אנו יכולים לחלץ את ההתאמה חוּט:

אם (matcher.find ()) {Assert.assertEquals ("25-09-1984", matcher.group ()); }

לפרטים נוספים על הביטויים הרגילים של Java, עיין במדריך זה.

5. שימוש לְפַצֵל

אנחנו יכולים להשתמש ב- לְפַצֵל שיטה מה- חוּט מחלקה לחילוץ מצע. נגיד שאנחנו רוצים לחלץ את המשפט הראשון מהדוגמה חוּט. זה די קל לעשות באמצעות לְפַצֵל:

מחרוזת [] משפטים = text.split ("\.");

מכיוון ששיטת הפיצול מקבלת regex היינו צריכים לברוח מהאופי התקופתי. כעת התוצאה היא מערך של 2 משפטים.

אנו יכולים להשתמש במשפט הראשון (או לחזור על כל המערך):

assertEquals ("ג'וליה אוונס נולדה בתאריך 25-09-1984", משפטים [0]);

שים לב שישנן דרכים טובות יותר לזיהוי משפטים ואסימון באמצעות אפאצ'י OpenNLP. עיין במדריך זה למידע נוסף על OpenNLP API.

6. שימוש סוֹרֵק

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

בואו נגלה כיצד להשתמש בזה כדי לקבל את המשפט הראשון מהטקסט לדוגמא:

נסה (סורק סורק = סורק חדש (טקסט)) {scanner.useDelimiter ("\."); assertEquals ("ג'וליה אוונס נולדה בתאריך 25-09-1984", scanner.next ()); }

בדוגמה שלעיל, הגדרנו את הדוגמה חוּט כמקור לשימוש הסורק.

לאחר מכן אנו מגדירים את תו המחזור כמפריד (שיש להימלט ממנו אחרת יתייחסו אליו כאל תו הביטוי הרגולרי המיוחד בהקשר זה).

לבסוף, אנו טוענים את האסימון הראשון מהפלט שתוחם זה.

אם נדרש, נוכל לחזור על האוסף המלא של אסימונים באמצעות בזמן לוּלָאָה.

בעוד (scanner.hasNext ()) {// לעשות משהו עם האסימונים שהוחזרו על ידי scanner.next ()}

7. תלות של Maven

אנחנו יכולים ללכת קצת יותר רחוק ולהשתמש בכלי עזר שימושי - StringUtils class - חלק מספריית Apache Commons Lang:

 org.apache.commons commons-lang3 3.8 

תוכל למצוא את הגרסה האחרונה של ספרייה זו כאן.

8. שימוש StringUtils

ספריות Apache Commons מוסיפות כמה שיטות שימושיות לתמרון סוגי Java מרכזיים. Apache Commons Lang מספק שורה של כלי עזר עבור ממשק ה- API של java.lang, בעיקר חוּט שיטות מניפולציה.

בדוגמה זו אנו הולכים לראות כיצד לחלץ מצע מקונן בין שניים מיתרים:

assertEquals ("ארצות הברית של אמריקה", StringUtils.substringBetween (טקסט, "(", ")");

קיימת גרסה פשוטה של ​​שיטה זו למקרה שהמזרק מקונן בין שני מקרים זהים חוּט:

substringBetween (String str, String tag)

ה substringAfter שיטה מאותה מחלקה מקבלת את המצע לאחר ההתרחשות הראשונה של מפריד.

המפריד אינו מוחזר:

assertEquals ("ארה"ב (ארצות הברית של אמריקה).", StringUtils.substringAfter (טקסט, "חי ב"));

באופן דומה, ה substring לפני השיטה מקבלת את המצע לפני המופע הראשון של מפריד.

המפריד אינו מוחזר:

assertEquals ("ג'וליה אוונס", StringUtils.substringBefore (טקסט, "נולדה"));

תוכל לעיין במדריך זה כדי ללמוד עוד על חוּט עיבוד באמצעות Apache Commons Lang API.

9. מסקנה

במאמר מהיר זה גילינו דרכים שונות לחילוץ מצע מ- a חוּט בג'אווה. תוכלו לחקור את ההדרכות האחרות שלנו בנושא חוּט מניפולציה בג'אווה.

כמו תמיד, ניתן למצוא קטעי קוד ב- GitHub.