JavaRush /בלוג Java /Random-HE /הפסקת קפה מס' 116. כיצד להשתמש במצביעי פונקציות ב-Java. i...

הפסקת קפה מס' 116. כיצד להשתמש במצביעי פונקציות ב-Java. indexOf ב-Java - כיצד למצוא אינדקס של מחרוזת ב-Java

פורסם בקבוצה

כיצד להשתמש במצביעי פונקציות ב-Java

מקור: Dev.to Pointers הם אובייקטים המאחסנים כתובת זיכרון ויכולים לחסוך זיכרון על ידי הצבעה ישירה על אובייקט יעד, מערך או כתובת משתנה במקום לעבור לפי ערך. למרבה הצער, אין מושג "אמיתי" של מצביעים ב-Java. אבל למזלנו, יש פתרון עוקף באמצעות הפניות לשיטות שקרובות לדבר האמיתי. הפסקת קפה מס' 116.  כיצד להשתמש במצביעי פונקציות ב-Java.  indexOf ב-Java - כיצד למצוא את האינדקס של מחרוזת ב-Java - 1

מצביעי פונקציה

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

הדמיית מצביע פונקציה

ישנם ארבעה סוגים של הפניות לשיטה . אנו משתמשים בסוג המתייחס לשיטת מופע של אובייקט ספציפי. נתחיל בהגדרת ממשק שמגדיר את החתימות של השיטות עליהן אתה מצביע.
// Wrapping interface
private interface FunctionPointer {
  // Method signatures of pointed method
  void methodSignature(int a);
}
לאחר מכן ניצור שיטות עם החתימה של שיטת המטרה.
public void method1(int b) {
  System.out.println("Called method1 with integer " + b);
}

public void method2(int v) {
  System.out.println("Called method2 with integer " + v);
}

public void method3(int a) {
  System.out.println("Called method3 with integer " + a);
}
השלב הבא הוא יצירת משתני ממשק עטיפה והקצאת שיטות להם. משתנים ישמשו כמצביע לפונקציה שיש לאחסן או לבצע.
// Create a variable of the interface and assign
// the method references
FunctionPointer pointer1 = this::method1;
FunctionPointer pointer2 = this::method2;

// Call both methods using their "pointer"
pointer1.methodSignature(3);
pointer2.methodSignature(2);

// Reassign and call pointer 1
pointer1 = this::method3;

pointer1.methodSignature(5);
נקרא שיטה1 עם מספר שלם 3 נקרא שיטה2 עם מספר שלם 2 נקרא שיטה3 עם מספר שלם 5

שימוש בביטויי למדה

ניתן להקצות הפניות לשיטה באמצעות ביטויי למבדה.
// Create a method reference and assign a methods using a lambda.
FunctionPointer pointer1 =
  (a) -> System.out.println("Called pointer1 with int " + a);

FunctionPointer pointer2 =
  (b) -> System.out.println("Called pointer2 with int " + b);

מערך מצביעי פונקציות

ניתן לחקות את הפונקציונליות של מערך הפניות לשיטה על ידי יצירת מערך ממשק עטיפה.
// Create an array of "pointers"
FunctionPointer[] functionPointersArray = new FunctionPointer[3];

// Assign methods
functionPointersArray[0] = this::method1;
functionPointersArray[1] = this::method2;
functionPointersArray[2] = this::method3;

// Call methods
functionPointersArray[0].methodSignature(3);
functionPointersArray[1].methodSignature(4);
functionPointersArray[2].methodSignature(5);

מצביע פונקציה לעומת שיחה ישירה

אם אתה משווה את שתי האפשרויות, קריאה ישירה למתודה מהירה כמעט פי 5 מאשר שימוש בהפניה לשיטה. כל זה בגלל השלב הנוסף של קריאה לביטוי למבדה בהשוואה לשיטה מאוחסנת. אבל כנראה שלא תבחין בשום אובדן ביצועים תוך שנה, אז אל תדאג בקשר לזה.

סיכום

מצביעים הם משתנים המצביעים ישירות לכתובת של אובייקט ולא לערך. מצביע הפונקציה מצביע ישירות על כתובת הפונקציה, מה שיכול להפחית את צריכת הזיכרון. ל-Java אין מצביעים, אך היא יכולה לחקות התנהגות באמצעות הפניות לשיטה או ביטויי למבדה. שימוש בהפניה למתודה איטי יותר מאשר קריאה ישירה למתודה, אבל זה לא מונע את השימוש בה.

indexOf ב-Java - כיצד למצוא אינדקס של מחרוזת ב-Java

מקור: FreeCodeCamp מחרוזת היא קבוצה של תווים המוקפים במירכאות כפולות. השיטה indexOf מחזירה את מיקום האינדקס של התו או המחרוזת שצוינו במחרוזת. במאמר זה נלמד על התחביר של שיטות indexOf שונות . נסתכל גם על דוגמאות שיעזרו לך להבין ולהשתמש ביעילות בחיפוש אחר האינדקס של תו או מחרוזת משנה בקוד Java. הפסקת קפה מס' 116.  כיצד להשתמש במצביעי פונקציות ב-Java.  indexOf ב-Java - כיצד למצוא אינדקס של מחרוזת ב-Java - 2

תחביר של שיטת indexOf

לשיטת indexOf יש את השיטות הבאות:
public int indexOf(int char)
public int indexOf(int char, int fromIndex)
public int indexOf(String str)
public int indexOf(String str, int fromIndex)
בואו נסביר את הפרמטרים האלה:
  • char מייצג תו אחד בכל שורה.
  • fromIndex מציין את המיקום שבו צריך להתחיל את החיפוש אחר האינדקס של תו או מחרוזת משנה. זה חשוב כאשר יש לך שני תווים/מחרוזות בעלי אותו ערך במחרוזת. עם פרמטר זה אתה יכול להגיד לשיטת indexOf היכן להתחיל.
  • str מייצג תת-מחרוזת במחרוזת.
אל תדאג אם אתה עדיין לא מבין איך הכל עובד - הדוגמאות יבהירו הכל!

כיצד להשתמש בשיטת indexOf ב-Java

בדוגמה הראשונה נמצא את האינדקס של תו אחד במחרוזת. זה יעזור לנו להבין את שיטת int public indexOf(int char) .

דוגמה לשיטת IndexOf(int Char).

public class Main {
  public static void main(String[] args) {
    String greetings = "Hello World";

    System.out.println(greetings.indexOf("o"));

    // 4
  }
}
בקוד למעלה, קיבלנו את האינדקס של התו "o" שהוחזר אלינו, שהוא 4. יש לנו שני תווים "o", אבל רק האינדקס של הראשון הוחזר. בדוגמה הבאה נראה כיצד נוכל להחזיר את המדד של ה-o השני. אם אתה תוהה כיצד נגזרים מספרי רצף, תשים לב שלתו הראשון במחרוזת יש אינדקס של אפס, לתו השני יש אינדקס של אחד, וכן הלאה.

דוגמה לשיטת indexOf(int Char, Int fromIndex).

הנה דוגמה שמסבירה את שיטת int indexOf(int char, int fromIndex) :
public class Main {
  public static void main(String[] args) {
    String greetings = "Hello World";

    System.out.println(greetings.indexOf("o", 5));

    // 7
  }
}
בדוגמה למעלה, אנו אומרים לשיטת indexOf להתחיל לעבוד באינדקס החמישי. H => אינדקס 0 e => אינדקס 1 l => אינדקס 2 l => אינדקס 3 0 => אינדקס 4 שימו לב כי אינדקס 5 אינו תו "W". המדד החמישי הוא הרווח בין "שלום" ל"עולם". לפיכך, בקוד זה, כל שאר התווים הקודמים לאינדקס החמישי יתעלמו. 7 מוחזר כאינדקס של התו השני "o".

דוגמה לשיטת Int indexOf(String Str).

בדוגמה הבאה, נבין כיצד פועלת שיטת public int indexOf(String str) , המחזירה את האינדקס של מחרוזת משנה.
public class Main {
  public static void main(String[] args) {
    String motivation = "Coding can be difficult but don't give up";

    System.out.println(motivation.indexOf("be"));

    // 11
  }
}
מעניין איך החזרנו 11? עליך לעיין בסעיף האחרון כדי להבין כיצד מדדים נספרים וכיצד גם רווחים בין מחרוזות משנה נחשבים למדדים. שימו לב שכאשר מחרוזת משנה מועברת כפרמטר, האינדקס המוחזר הוא האינדקס של התו הראשון במחרוזת המשנה. 11 הוא האינדקס של התו "b".

דוגמה לשיטת indexOf(String Str, Int fromIndex).

השיטה האחרונה היא public int indexOf(String str, int fromIndex) - זהה לשיטת public int indexOf(int char, int fromIndex) . זה מחזיר את המדד מהמיקום שצוין.
public class Main {
  public static void main(String[] args) {
    String motivation = "The for loop is used for the following";

    System.out.println(motivation.indexOf("for", 5));

    // 21
  }
}
בדוגמה זו, ציינו שהשיטה צריכה להתחיל את עבודתה באינדקס החמישי, שמגיע אחרי המחרוזת הראשונה עבור. 21 הוא האינדקס של המחרוזת השנייה של for. לבסוף, כאשר נעביר תו או מחרוזת משנה שאינם במחרוזת, המתודה indexOf תחזיר -1. הנה דוגמה:
public class Main {
  public static void main(String[] args) {
    String motivation = "The for loop is used for the following";

    System.out.println(motivation.indexOf("code"));

    // -1
  }
}

סיכום

במאמר זה, למדנו כיצד להשתמש בארבע השיטות indexOf , עם דוגמאות ברורות. ראינו גם איך נראה התחביר של כל אחת מהשיטות האלה ואיך הן אומרות לאינדקס לחזור. בנוסף, הצלחנו לגלות מה קורה כאשר תו או תת-מחרוזת לא קיים מועברים כפרמטר.
הערות
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION