Download presentation
Presentation is loading. Please wait.
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
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.