Presentation is loading. Please wait.

Presentation is loading. Please wait.

מחרוזות – הטיפוס String

Similar presentations


Presentation on theme: "מחרוזות – הטיפוס String"— Presentation transcript:

1 מחרוזות – הטיפוס String
מוטי בן-ארי, רגוניס נוע המחלקה להוראת המדעים מכון ויצמן למדע

2 Copyright © Moti Ben-Ari, Noa Ragonis
מה שזה לא !! הטיפוס String מוגדר מראש כטיפוס לכל דבר. עצם מטיפוס String אינו מערך של תווים!! (ניתן להמיר מן האחד לשני.) עצם מטיפוס String הוא קבוע שאי-אפשר לשנות על ידי פנייה לתווים בודדים!! עיבוד מחרוזות מתבצע ע"י פירוק לתת-מחרוזות והרכבה בשרשור. קיים טיפוס StringBuffer הדומה למחרוזות המוכרות מ-Pascal ו-C. לא נהוג להשתמש בו. Copyright © Moti Ben-Ari, Noa Ragonis

3 Copyright © Moti Ben-Ari, Noa Ragonis
מחרוזת כעצם String s = “abcde”; String t = “fghi”; קיימת גם פעולה יוצרת המייצרת מחרוזת חדשה ממחרוזת קיימת. t abcde fghi s Copyright © Moti Ben-Ari, Noa Ragonis

4 Copyright © Moti Ben-Ari, Noa Ragonis
מחרוזת כעצם - השמה s = t; קיים "איסוף זבל" (garbage collection) למחזור הזיכרון. abcde fghi s t Copyright © Moti Ben-Ari, Noa Ragonis

5 Copyright © Moti Ben-Ari, Noa Ragonis
מחרוזת כעצם - השוואה String s = “abcde”; t = “abcde”; String u = “ab”; v = “cde”; w = u+v; ( s == t ) // true !! ( s == w ) // false !! ( s.equals(w) ) // true abcde s w Copyright © Moti Ben-Ari, Noa Ragonis

6 Copyright © Moti Ben-Ari, Noa Ragonis
המלצות להשתמש ב-String. לבצע השוואות ע"י equals. לייצר מחרוזות חדשות ע"י שרשור, אפילו שרשור של המחרוזת הריקה! String t = s + “”; לא תמיד חייבים לייצר משתנה: setText(title + “ “ + version); Copyright © Moti Ben-Ari, Noa Ragonis

7 Copyright © Moti Ben-Ari, Noa Ragonis
הקצאת זיכרון ב-C (ו-C++) הקצאה "מופקרת" של זיכרון. ב-Pascal ו-C++, הקצאת זיכרון של עצמים (רשומות), ושחרור ידני. סכנה של "זליגת זיכרון" (memory leaks). ב-Java הקצאה של עצמים. אין שחרור ידני. s = null; איסוף זבל מתבצע באופן אוטומטי "מאחורי הקלעים", לכן אין זליגה. סכנה של פגיעה בזמן תגובה בתכניות. Copyright © Moti Ben-Ari, Noa Ragonis

8 Copyright © Moti Ben-Ari, Noa Ragonis
שרשור פעולת השרשור מוגדרת על ידי האופרטור +. שרשור מייצר עצם חדש: s = s + “***” + t + ‘\n’; צ'ופר רציני: כל ערך עובר המרה אוטומטית למחרוזת כאשר + מופיע: int count = …; System.out.println(“Count is = “ + count); Copyright © Moti Ben-Ari, Noa Ragonis

9 Copyright © Moti Ben-Ari, Noa Ragonis
הפעולה toString ההמרה מתבצעת ע"י זימון סמוי לפעולה toString של העצם. ניתן לשנות פעולה זו כנדרש: class Pepper { public String toString() { return “Size = “ + size + “, color = “ + color + “, weight (kg) = “ + weight; } Copyright © Moti Ben-Ari, Noa Ragonis

10 Copyright © Moti Ben-Ari, Noa Ragonis
הפעולה length לכל מחרוזת קיימת פעולה length(), המחזירה את האורך של המחרוזת. דוגמה: System.out.println( “The size of “ + s + “ is “ + s.length() ); Copyright © Moti Ben-Ari, Noa Ragonis

11 מחרוזת לעומת מערך (length)
שים לב!! מחרוזת היא עצם שעליה מוגדרת פעולה ללא פרמטרים length(). if (s.length() > 0) …. לכל מערך קיימת תכונה length. int[] a = new int[10]; for (int i = 0; i < a.length; i++) Copyright © Moti Ben-Ari, Noa Ragonis

12 Copyright © Moti Ben-Ari, Noa Ragonis
גישה לתווים בודדים ניתן לקרוא תווים בודדים לפי מיקומם, אך אי-אפשר לשנות אותם: for (int i = 0; i < s.length(); i++) if (s.charAt(i) == ‘*’) count++; Copyright © Moti Ben-Ari, Noa Ragonis

13 Copyright © Moti Ben-Ari, Noa Ragonis
השוואות בין מחרוזות equals מחזיר boolean. compareTo משווה שתי מחרוזות לפי סדר lexicographic. הפונקציה מחזירה int: if (s.compareTo(t) < 0) // s before t else if (s.compareTo(t) > 0) // s after t else // s same as t Copyright © Moti Ben-Ari, Noa Ragonis

14 פעולות מגוונות בטיפוס String
חיפושים: startsWith , endsWith, indexOf, lastIndexOf. שליפת תת-מחרוזת: substring. צמצום רווחים בקצוות: trim. אותיות גדולות/קטנות: toLowerCase, toUpperCase. Copyright © Moti Ben-Ari, Noa Ragonis

15 דוגמה – מחיקת תת-מחרוזת
String delete(String s, int from, int to) { String start = s.substring(0, from); String end = s.substring(to+1); return start + end; } s = delete(s, 4, 7); from to length-1 Copyright © Moti Ben-Ari, Noa Ragonis

16 דוגמה – הכנסת תת-מחרוזת
String insert(String s, String sub, int at) { String start = s.substring(0, at); String end = s.substring(at); return start + sub + end; } s = insert(s, " the", 4); at length-1 Copyright © Moti Ben-Ari, Noa Ragonis

17 Copyright © Moti Ben-Ari, Noa Ragonis
class ReverseWords { static String s = "The quick brown fox jumped over the lazy dog"; static String t = ""; public static void main(String[] args) { int space = s.lastIndexOf(' '); while (space != -1) { t = t + s.substring(space+1) + " "; s = s.substring(0, space); space = s.lastIndexOf(' '); } t = t + s; System.out.println(t); Copyright © Moti Ben-Ari, Noa Ragonis


Download ppt "מחרוזות – הטיפוס String"

Similar presentations


Ads by Google