השוואת מחרוזות
חלק מהיחידה יסודות במסלול ה-Java של Coddy. שיעור 70 מתוך 73.
ב-Java, השוואת מחרוזות אינה פשוטה כמו השוואת טיפוסי נתונים פרימיטיביים, כגון מספרים שלמים או תווים. אי אפשר להשתמש באופרטור == כדי להשוות בין מחרוזות ולבדוק אם הן שוות, משום שמחרוזות הן אובייקטים, ו-== ישווה את כתובות הזיכרון שלהן ולא את התוכן שלהן. במקום זאת, צריך להשתמש בשיטות ייעודיות שמספקת המחלקה String כדי להשוות את התווים בפועל בתוך המחרוזות.
הנה השיטות העיקריות להשוואת מחרוזות:
equals(Object other): משווה את המחרוזת לאובייקט אחר (בדרך כלל מחרוזת אחרת). מחזירהtrueאם למחרוזות יש את אותם תווים באותו סדר, ו-falseאחרת. השיטה הזו רגישה לאותיות רישיות.
equalsIgnoreCase(String other): דומה ל־equals, אך מתעלמת מהבדלי רישיות. מחזירהtrueאם המחרוזות מכילות את אותם התווים, בלי קשר לרישיות שלהם, ואחרת מחזירהfalse.
compareTo(String other): משווה בין שתי מחרוזות בסדר לקסיקוגרפי (על סמך ערכי ה-Unicode שלהן). מחזירה 0 אם המחרוזות שוות, מספר שלילי אם המחרוזת הראשונה קטנה מהשנייה, ומספר חיובי אם המחרוזת הראשונה גדולה מהשנייה. שיטה זו רגישה לאותיות רישיות וקטנות.
compareToIgnoreCase(String other): בדומה ל-compareTo, אך מתעלמת מהבדלי רישיות.
הנה דוגמה:
String str1 = "hello";
String str2 = "hello";
String str3 = "HELLO";
String str4 = "world";
boolean eq1 = str1.equals(str2); // נכון
boolean eq2 = str1.equals(str3); // לא נכון
boolean eq3 = str1.equalsIgnoreCase(str3); // נכון
int cmp1 = str1.compareTo(str2); // 0
int cmp2 = str1.compareTo(str4); // ערך שלילי
int cmp3 = str4.compareTo(str1); // ערך חיובי
int cmp4 = str1.compareToIgnoreCase(str3); // 0אתגר
קלצרו מתודה בשם compareStrings שמקבלת שתי מחרוזות כקלט ומבצעת את ההשוואות הבאות:
- בודקת אם שתי המחרוזות שוות באמצעות
equalsומדפיסה את התוצאה. - בודקת אם שתי המחרוזות שוות (ללא התחשבות באותיות גדולות וקטנות) באמצעות
equalsIgnoreCaseומדפיסה את התוצאה. - משווה בין שתי המחרוזות באמצעות
compareToומדפיסה את התוצאה. - משווה בין שתי המחרוזות (ללא התחשבות באותיות גדולות וקטנות) באמצעות
compareToIgnoreCaseומדפיסה את התוצאה.
דוגמת פלט עבור מחרוזות הקלט HELLO ו-hello:
HELLO equals hello: false
HELLO equalsIgnoreCase hello: true
HELLO compareTo hello: -32
HELLO compareToIgnoreCase hello: 0נסו בעצמכם
import java.util.Scanner;
public class Main {
public static void compareStrings(String str1, String str2) {
// כתבו את הקוד שלכם כאן
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String str1 = scanner.nextLine();
String str2 = scanner.nextLine();
compareStrings(str1, str2);
}
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה יסודות
4אופרטורים חלק 1
אופרטורים אריתמטייםאופרטור מודולוהגדלה/הקטנההגדלה/הקטנה לאחר מכןקיצורים אריתמטייםאופרטורי השוואההשוואת מחרוזות5אופרטורים חלק 2
אופרטורים לוגיים חלק 1אופרטורים לוגיים חלק 2סיכום - לוגיקה פשוטהאופרטורים לוגיים חלק 3אופרטורים לוגיים חלק 4תרגלו בעצמכם: קומפיילר Java אונליין