JavaRush /Java блог /Random UA /Кава-брейк #116. Як використовувати покажчики функцій Jav...

Кава-брейк #116. Як використовувати покажчики функцій Java. indexOf в Java — Як знайти індекс рядка в Java

Стаття з групи Random UA

Як використовувати покажчики функцій у 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);
Called method1 with integer 3 Called method2 with integer 2 Called method3 with integer 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

У першому прикладі ми знайдемо індекс одного символу у рядку. Це допоможе зрозуміти метод public int 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
  }
}
У наведеному вище коді ми отримали повернутий нам індекс символу “о”, який дорівнює 4. У нас є два символи “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 => index 0 e => index 1 l => index 2 l => index 3 0 => index 4 Зверніть увагу, що індекс 5 не є символом "W". П'ятий індекс - це пробіл між "Hello" і "World". Таким чином, у цьому коді всі інші символи, що передують п'ятому індексу, ігноруватимуться. 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
  }
}
У цьому прикладі ми вказали, що метод повинен починати свою роботу з п'ятого індексу, який іде після першого підрядку for. 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 з наочними прикладами. Ми також побачабо, як виглядає синтаксис кожного з цих методів і як вони повідомляють індекс про повернення. Крім того, нам вдалося дізнатися, що відбувається, коли як параметр передається неіснуючий символ або підрядок.
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ