טבלת ASCII

מהי ASCII?

ASCII (American Standard Code for Information Interchange) היא טבלת קידוד שממפה מספרים לתווים. לכל אות אנגלית, ספרה וסימן יש מספר משלו בטווח שבין 0 ל-127.

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

טווחים חשובים בטבלה

תווים קודים דוגמה
תווים מיוחדים (בלתי נראים) 0-31 \n (10), \t (9)
רווח 32 ' '
ספרות 48-57 '0'=48, '9'=57
אות גדולה 65-90 'A'=65, 'Z'=90
אות קטנה 97-122 'a'=97, 'z'=122

המרה בין תו למספר

char ch = 'A';
int code = ch;         // 65
System.out.println(code);

int n = 66;
char letter = (char) n;  // 'B'
System.out.println(letter);

פעולות שימושיות

בדיקה אם תו הוא ספרה

char ch = '5';
if (ch >= '0' && ch <= '9') {
    System.out.println("ספרה");
}

או דרך Character:

if (Character.isDigit(ch)) {
    System.out.println("ספרה");
}

המרת ספרה (תו) למספר

char digit = '7';
int number = digit - '0';   // 7

למה זה עובד? הקוד של '7' הוא 55 והקוד של '0' הוא 48, ולכן ההפרש '7' - '0' שווה בדיוק ל-7.

בדיקה אם תו הוא אות

if (Character.isLetter(ch)) { }
if (Character.isUpperCase(ch)) { }
if (Character.isLowerCase(ch)) { }

המרה מקטנה לגדולה ולהיפך

char lower = 'a';
char upper = (char)(lower - 32);    // 'A'
// (כי ההפרש בין אות קטנה לגדולה הוא תמיד 32)

// או הדרך הנקייה:
char upper2 = Character.toUpperCase(lower);
char lower2 = Character.toLowerCase('A');

ASCII מול Unicode

  • ASCII - 7 ביט, 128 תווים. רק אנגלית.
  • Unicode - מערכת עולמית. כולל עברית, ערבית, סינית, אימוג'ים ועוד.

ב-Java הטיפוס char מבוסס על Unicode. מכיוון ש-ASCII הוא תת-קבוצה של Unicode - הקודים 0-127 זהים בשתי המערכות - כל הטקסט האנגלי ממשיך לעבוד בדיוק כרגיל.

עברית ב-Unicode

char hebrew = 'ש';
int code = hebrew;    // 1513 (0x05E9)
System.out.println(code);

דוגמה: הדפסת כל האותיות באנגלית

for (char ch = 'a'; ch <= 'z'; ch++) {
    System.out.print(ch + " ");
}
// a b c d e f g h i j k l m n o p q r s t u v w x y z

דוגמה: סכימת הספרות שבמחרוזת

String input = "a1b2c3";
int sum = 0;
for (int i = 0; i < input.length(); i++) {
    char ch = input.charAt(i);
    if (Character.isDigit(ch)) {
        sum += (ch - '0');
    }
}
System.out.println("סכום הספרות: " + sum);  // 6

טבלת ASCII - תווים נפוצים

תו קוד תו קוד
' ' 32 '0' 48
'!' 33 '9' 57
'"' 34 'A' 65
'#' 35 'Z' 90
'$' 36 'a' 97
'%' 37 'z' 122
'&' 38 '\n' 10
'*' 42 '\t' 9
'+' 43 '\0' 0

בדקו את עצמכם

נסו לענות לבד לפני שאתם פותחים את התשובה.

  1. מה התוצאה של '7' - '0' ב-Java?

    1. "70"
    2. 55
    3. שגיאת קומפילציה
    4. 7
    הצגת התשובה

    תשובה ד. char הוא מספר: הקוד של '7' הוא 55 ושל '0' הוא 48, וההפרש הוא 7.

  2. מה הקשר בין ASCII ל-Unicode?

    1. ASCII הוא תת-קבוצה של Unicode: הקודים 0-127 זהים בשתיהן
    2. Java משתמשת רק ב-ASCII
    3. Unicode הוא תת-קבוצה של ASCII
    4. אין קשר
    הצגת התשובה

    תשובה א. Unicode מכסה את כל השפות, ו-128 התווים הראשונים שלו זהים ל-ASCII.