מדריך ל- StreamTokenizer

1. הקדמה

במדריך זה נראה כיצד לנתח זרם של תווים לאסימונים באמצעות Java StreamTokenizer מעמד.

2. StreamTokenizer

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

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

  • דמויות מילים: נע בין 'a' ל- 'z' ו- 'A' ל- 'Z
  • תווים מספריים: 0,1,…,9
  • תווים לבנים: ערכי ASCII מ 0 עד 32
  • דמות תגובה: /
  • תווים ציטוטים מחרוזת: ‘ו-“

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

בכיתה זו יש מגוון תחומים חשובים:

  • TT_EOF - קבוע המציין את סוף הנחל
  • TT_EOL - קבוע המציין את סוף הקו
  • TT_NUMBER - קבוע המציין אסימון מספר
  • TT_WORD - קבוע המציין אסימון מילה

3. תצורת ברירת מחדל

כאן ניצור דוגמה על מנת להבין את StreamTokenizer מַנגָנוֹן. נתחיל ביצירת מופע של מחלקה זו ואז נקרא ל nextToken () השיטה עד שהיא מחזירה את TT_EOF ערך:

final final static int QUOTE_CHARACTER = '\' '; private static final int DOUBLE_QUOTE_CHARACTER = '"'; רשימה סטטית ציבורית streamTokenizerWithDefaultConfiguration (קורא קורא) זורק IOException {StreamTokenizer streamTokenizer = StreamTokenizer חדש (קורא); רשימת אסימונים = ArrayList חדש (); int currentToken = streamTokenizer.nextToken () ! = StreamTokenizer.TT_EOF) {if (streamTokenizer.ttype == StreamTokenizer.TT_NUMBER) {tokens.add (streamTokenizer.nval);} אחרת אם (streamTokenizer.ttype == StreamTokenizer.TT_WORD || streamTokenizer.ttype == QUOTE_CHARACTER || streamTokenizer.ttype == DOUBLE_QUOTE_CHARACTER) {tokens.add (streamTokenizer.sval);} אחר {tokens.add ((char) currentToken);} currentToken = streamTokenizer.nextToken ();} החזר אסימונים;}

קובץ הבדיקה פשוט מכיל:

3 שועלים חומים מהירים קופצים מעל הכלב "העצלן"! # test1 // test2

כעת, אם נדפיס את תוכן המערך, נראה:

מספר: 3.0 מילה: מילה מהירה: חום מילה: שועלים מילה: קפיצה מילה: מעל מילה: המילה: עצל מילה: כלב שור רגיל:! תו רגיל: # Word: test1

על מנת להבין טוב יותר את הדוגמה, עלינו להסביר את StreamTokenizer.ttype, StreamTokenizer.nval ו StreamTokenizer.sval שדות.

ה סוג השדה מכיל את סוג האסימון שזה עתה נקרא. זה יכול להיות TT_EOF, TT_EOL, TT_NUMBER, TT_WORD. למרות זאת, עבור אסימון מחרוזת מצוטט, הערך שלו הוא הערך ASCII של דמות הציטוט. יתר על כן, אם האסימון הוא דמות רגילה כמו ‘!', ללא תכונות, ואז סוג יאוכלס בערך ASCII של אותו תו.

הַבָּא, אנחנו משתמשים סוואל שדה כדי לקבל את האסימון, רק אם זה א TT_WORDכלומר אסימון מילה. אבל, אם עסקינן באסימון מחרוזת מצוטט - אמור "עצלן" - ואז שדה זה מכיל את גוף המחרוזת.

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

4. תצורה מותאמת אישית

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

ראשון, אנו נקבע כמה תווי מילים נוספים באמצעות ה- wordChars (int נמוך, int hi) שיטה. לאחר מכן, אנו נהפוך את דמות ההערה ('/') לדמוייה רגילה ולקדם ‘#' כדמות ההערה החדשה.

סוף כל סוף, אנו נתייחס לסוף השורה כדמות סמלית בעזרת ה- eolIsSignificant (דגל בוליאני) שיטה.

אנחנו רק צריכים לקרוא לשיטות אלה ב- streamTokenizer לְהִתְנַגֵד:

רשימה סטטית ציבורית streamTokenizerWithCustomConfiguration (קורא קורא) זורק IOException {StreamTokenizer streamTokenizer = StreamTokenizer חדש (קורא); אסימונים לרשימה = ArrayList חדש (); streamTokenizer.wordChars ('!', '-'); streamTokenizer.ordinaryChar ('/'); streamTokenizer.commentChar ('#'); streamTokenizer.eolIsSignificant (נכון); // זהה לאסימני ההחזרה לפני; }

וכאן יש לנו תפוקה חדשה:

// אותה פלט כמו מילה קודמת: "עצלן" מילה: כלב! Char char: רגיל char: char רגיל: / char רגיל: / Word: test2

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

כמו כן, הדילוגים שעוקבים אחר הדמות '#' מדלגים כעת וה' / 'הוא דמות רגילה.

יכולנו גם לשנות את אופי הציטוט עם quoteChar (int ch) שיטה או אפילו את התווים הרווחים על ידי התקשרות whitespaceChars (int נמוך, int hi) שיטה. לפיכך, ניתן לבצע התאמות אישיות נוספות להתקשרות StreamTokenizerשיטות בשילובים שונים.

5. מסקנה

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

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

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


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