CodeGym /בלוג Java /Random-HE /שיטת Java isDigit
John Squirrels
רָמָה
San Francisco

שיטת Java isDigit

פורסם בקבוצה
שיטות המחזירות ערך בוליאני לרוב מתחילות במילה "is" ומתכוונות לבדוק אם האלמנט הנבדק תואם לתנאי מסוים. שיטת Character.isDigit() , שעליה נדון במאמר זה, קובעת אם ערך ה-char שצוין הוא ספרה.

תחביר שיטת Java isDigit

java.lang.Character.isDigit(char ch) היא שיטה מובנית ב-Java שקובעת אם התו שצוין הוא ספרה או לא. מה המשמעות של "ספרה" בהקשר התכנות של Java? לפי ההגדרה ב-Java Doc, אם השיטה Character.getType(ch) מחזירה DECIMAL_DIGIT_NUMBER קבוע, אז התו הוא ספרה. חלק מטווחי התווים של Unicode המכילים ספרות הם הבאים:
  • מ-'\u0030' עד '\u0039' הן ספרות ISO-LATIN-1 ('0' עד '9')

  • מ-'\u0660' עד '\u0669' הן ספרות ערבית-הודיות

  • מ'\u06F0' עד'\u06F9' הן ספרות ערבית-הודיות מורחבות

  • מ'\u0966' עד '\u096F' הן ספרות Devanagari

  • מ-\uFF10' עד '\uFF19'הן ספרות ברוחב מלא

ישנם גם כמה טווחים אחרים המכילים ספרות. עם זאת, לרוב אנו הולכים להשתמש בספרות מ'\u0030' עד '\u0039'. התחביר של Character.isDigit() נמצא כאן:
public static boolean isDigit(char myChar)
היכן myChar הוא הדמות שתיבחן. שיטה זו מחזירה true אם התו הוא ספרה ו- false אחרת. לפי שיטת Java doc isDigit(char myChar) לא יכולה להתמודד עם תווים משלימים. כדי לתמוך בכל תווי Unicode, כולל תווים משלימים, על המתכנת להשתמש בשיטת isDigit(int) . זה נראה באותו אופן, אבל הודות ל-OOP ולפולימורפיזם התמיכה פועלת קצת אחרת. public static boolean isDigit(int codePoint) קובע אם התו שצוין (נקודת קוד Unicode) הוא ספרה. בטרמינולוגיה של קידוד תווים, נקודת קוד או מיקום קוד הם ערך מספרי התואם לתו ספציפי. isDigit(int codePoint) מחזירה גם true אם התו הוא ספרה ו- false אחרת.

דוגמה פשוטה לשיטת Java isDigit

בואו ננסה לעבוד עם שיטת Java Characher.isDigit() . קודם כל אנחנו הולכים לכתוב תוכנית פשוטה כדי להדגים את השיטה.
public class isDigitTest {
//isDigit(char ch) simple example
   public static void main(String[] args)
   {

       //characters to check using isDigit Java method
       char myChar1 = '5', myChar2 = 'u', myChar3 = '0';

       // Function to check if the character
       // is digit or not, using isDigit() method
       System.out.println("is char " + myChar1 + " a digit? "
                       + Character.isDigit(myChar1));
       System.out.println(
               "is char " + myChar2 + " a digit? "
                       + Character.isDigit(myChar2));

       System.out.println(
               "is char " + myChar3 + " a digit? "
                       + Character.isDigit(myChar3));
   }
}
הפלט הוא:
האם char 5 הוא ספרה? נכון האם char ua digit? false היא char ua digit? נָכוֹן

שיטת Java isDigit, דוגמה קצת יותר מסובכת

בואו ננסה להשתמש ב-Character.isDigit() בבעיה מעניינת ומציאותית יותר. ישנה שיטת דחיסה שנקראת Run Length Encoding או בקיצור RLE. Run Length Encoding הוא אלגוריתם דחיסת נתונים המחליף תווים חוזרים (סדרות) עם תו אחד ומספר החזרות שלו. סדרה היא רצף המורכב ממספר דמויות זהות. בעת הקידוד (אריזה, דחיסה), מחרוזת של תווים זהים המרכיבים סדרה מוחלפת במחרוזת המכילה את התו החוזר עצמו ואת מספר החזרות שלו. אז אם יש לך מחרוזת "hhhhhorrribleeee" קידוד אורך ריצה נותן תוצאה: h5or3ible5. אם אתה מפענח את המחרוזת, עליך לבדוק ברצף אם יש לך תו ספרתי או לא ספרתי, ואם יש לך ספרה, הגיע הזמן לקבל מהי הספרה. אגב, כולכם מכירים קבצי JPEG. פורמט זה משתמש בגרסה של קידוד באורך ריצה בתבנית אלכסונית על פני נתונים כמותיים. הגרסה היא שרק אורך הריצות של אפס ערכים מקודדים וכל שאר הערכים מקודדים כמו עצמם. בדוגמה למטה, אנו משתמשים בשיטת Character.isDigit(char ch) כדי לפענח מחרוזת מקודדת בקידוד באורך ריצה. אם אתה מעוניין, נסה להשלים את התוכנית, או ליתר דיוק, צור את החלק הראשון שלה וכתוב שיטה לקידוד RLE של מחרוזת, כמו גם קריאת מחרוזת מקובץ. או הזנה ידנית של מחרוזת מהמסוף תוך בדיקת נכונות הקלט. הנה דוגמה לפענוח RLE:
public class RleTest {

   //the method to decode String using run-length encoding and
//isDigit() method
   private static String decodeRle(String encoded) {
       if (encoded.isBlank()) return "";
       StringBuilder result = new StringBuilder();
       int count = 0;
       char baseChar = encoded.charAt(0);
       for (int i = 1; i <= encoded.length(); i++) {
           char c = i == encoded.length() ? '$' : encoded.charAt(i);
//checking using isDigit() method
if (Character.isDigit(c)) {
               count = count * 10 + Character.digit(c, 10);
           } else {
               do {
                   result.append(baseChar);
                   count--;
               } while (count > 0);
               count = 0;
               baseChar = c;
           }
       }
       return result.toString();
   }

public static void main(String[] args) {
//here we are going to decode an RLE-encoded string
       System.out.println(decodeRle("C3ecddf8"));
   }
}
הפלט הוא:
CCCecddffffffff
אולי שמתם לב שאנחנו לא משתמשים במחרוזת , אלא ב- StringBuilder . למה? העובדה היא ש- String הוא בלתי ניתן לשינוי, ואנחנו מגדילים את המונה, ובכל פעם תיווצר מחרוזת חדשה. השתמשנו גם בשיטת Character.digit בתוכנית. java.lang.Character.digit() היא שיטה המחזירה את הערך המספרי של התו ch במערכת המספרים שצוינה. אם הבסיס אינו בטווח MIN_RADIX <= base <= MAX_RADIX, או אם ch אינה ספרה חוקית בבסיס שצוין, השיטה מחזירה -1.
הערות
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION