מדריך מהיר ל- Java StringTokenizer

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

במאמר מהיר זה, נחקור מחלקה בסיסית בג'אווה - ה- StringTokenizer.

2. StringTokenizer

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

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

ניתן לציין את קבוצת המפרידים (התווים המפרידים בין אסימונים) בזמן היצירה או על בסיס פר אסימון.

3. באמצעות StringTokenizer

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

בדוגמה מהירה זו, אנו נפצל את מחרוזת הארגומנט ונוסיף את האסימונים לרשימה:

רשימה רשימת getTokens (מחרוזת str) {אסימונים לרשימה = ArrayList חדש (); StringTokenizer tokenizer = StringTokenizer חדש (str, ","); בעוד (tokenizer.hasMoreElements ()) {tokens.add (tokenizer.nextToken ()); } להחזיר אסימונים; } 

שימו לב איך אנחנו שוברים את חוּט לרשימת האסימונים המבוססים על תיחום ','. ואז בלולאה, באמצעות tokens.add () שיטה; אנו מוסיפים כל אסימון לתוך ה- רשימת מערך.

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

3.1. גישת Java 8

מאז StringTokenizer מכשירים ספירה ממשק, אנחנו יכולים להשתמש בו עם Javaשל אוספים מִמְשָׁק.

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

רשימה ציבורית getTokensWithCollection (String str) {return Collections.list (StringTokenizer חדש (str, ",")). stream () .map (token -> (String) token) .collect (Collectors.toList ()); }

הנה, אנחנו מעבירים את StringTokenizer עצמה כפרמטר ב- Collections.list () שיטה.

נקודה לציין כאן היא כי מאז ספירה הוא לְהִתְנַגֵד סוג, אנחנו צריכים להקליד את האסימונים אליהם חוּט סוּג (כלומר תלוי ביישום; אם אנו משתמשים רשימה שֶׁל שלם / צף ואז נצטרך להקליד עם שלם / צף).

3.2. גרסאות של StringTokenizer

StringTokenizer מגיע עם שני קונסטרוקטורים עמוסים לצד קונסטרוקטור ברירת המחדל: StringTokenizer (מחרוזת מחרוזת) ו StringTokenizer (מחרוזת, מחרוזת, מחרוזת בוליאנית ReturnDelims):

StringTokenizer (מחרוזת מחרוזת, מחרוזת מחרוזת, החזרת בוליאני) לוקח תוספת בוליאני קֶלֶט. אם ה בוליאני הערך הוא נָכוֹן, לאחר מכן StringTokenizer רואה במתחם עצמו אסימון ומוסיף אותו למאגר האסימונים הפנימי שלו.

StringTokenizer (מחרוזת str) הוא קיצור דרך לדוגמא הקודמת; זה מכנה באופן פנימי את הבנאי השני עם התיחום המקודד כ- "\ T \ n \ r \ f" והערך הבוליאני כ שֶׁקֶר.

3.3. התאמה אישית של אסימון

StringTokenizer מגיע גם עם עומס יתר nextToken () שיטה שלוקחת קטע מחרוזת כקלט. זֶה חוּט שבר משמש כמערכת תריכים נוספת; על סמך אילו אסימונים מארגנים מחדש.

למשל, אם נוכל לעבור 'ה' בתוך ה nextToken () שיטה לשבור עוד יותר את המחרוזת בהתבסס על המפריד 'ה‘:

tokens.add (tokenizer.nextToken ("e"));

לפיכך, עבור מחרוזת נתונה של 'שלום, baeldung.com'אנו מייצרים את האסימונים הבאים:

H llo ba ldung.com

3.4. אורך האסימון

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

int tokenLength = tokens.size ();

3.5. קריאה מקובץ CSV

עכשיו, בואו ננסה להשתמש StringTokenizer במקרה שימוש אמיתי.

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

באמצעות StringTokenizerאנחנו יכולים להגיע לשם בקלות:

רשימה רשימת getTokensFromFile (נתיב מחרוזת, מחרוזת מחרוזת) {רשימה אסימונים = ArrayList חדש (); מחרוזת currLine = ""; טוקניזר StringTokenizer; נסה (BufferedReader br = BufferedReader חדש (InputStreamReader חדש (Application.class.getResourceAsStream ("/" + נתיב)))) {while ((currLine = br.readLine ())! = null) {tokenizer = StringTokenizer חדש (currLine, delim); בעוד (tokenizer.hasMoreElements ()) {tokens.add (tokenizer.nextToken ()); }}} לתפוס (IOException e) {e.printStackTrace (); } להחזיר אסימונים; }

כאן, הפונקציה לוקחת שני טיעונים; אחד כשם קובץ CSV (כלומר נקרא מהמשאבים [src -> ראשי -> משאבים] התיקיה) והשנייה כמפריד.

בהתבסס על שני טיעונים אלה, נתוני ה- CSV נקראים שורה אחר שורה, וכל שורה מקבלת אסימון באמצעות StringTokenizer.

לדוגמה, הכנסנו את התוכן הבא ל- CSV:

1 | IND | הודו 2 | MY | מלזיה 3 | AU | אוסטרליה

לפיכך, יש ליצור את האסימונים הבאים:

1 IND הודו 2 מלזיה שלי 3 AU אוסטרליה

3.6. בדיקה

עכשיו, בואו ניצור מקרה מבחן מהיר:

מחלקה ציבורית TokenizerTest {פרטי MyTokenizer myTokenizer = MyTokenizer חדש (); רשימה פרטית expectTokensForString = Arrays.asList ("ברוך הבא", "אל", "baeldung.com"); רשימה פרטית expectTokensForFile = Arrays.asList ("1", "IND", "הודו", "2", "MY", "מלזיה", "3", "AU", "אוסטרליה"); @Test הציבור בטל givenString_thenGetListOfString () {String str = "ברוך הבא, ל-, baeldung.com"; רשימת actualTokens = myTokenizer.getTokens (str); assertEquals (expectTokensForString, actualTokens); } @Test ציבורי בטל givenFile_thenGetListOfString () רשימה actualTokens = myTokenizer.getTokensFromFile ("data.csv", "}

4. מסקנה

במדריך מהיר זה, הסתכלנו על כמה דוגמאות מעשיות לשימוש ב- Java הליבה StringTokenizer.

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