JavaRush /Java Blog /Random-TW /喝咖啡休息#116。如何在 Java 中使用函數指標。Java 中的 indexOf - 如何在 Java 中尋找...

喝咖啡休息#116。如何在 Java 中使用函數指標。Java 中的 indexOf - 如何在 Java 中尋找字串的索引

在 Random-TW 群組發布

Java中函數指標的使用方法

來源:Dev.to 指標是儲存記憶體位址的對象,可以透過直接指向目標對象、陣列或變數位址而不是按值傳遞來節省記憶體。不幸的是,Java 中沒有「真正」的指標概念。但幸運的是,我們有一種使用接近真實情況的方法來引用的解決方法。 喝咖啡休息#116。 如何在 Java 中使用函數指標。 Java 中的 indexOf - 如何在 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);
使用整數 3 呼叫方法 1 使用整數 2 呼叫方法 2 使用整數 5 呼叫方法 3

使用 Lambda 表達式

可以使用 lambda 表達式分配方法來引用。
// 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 倍。這都是因為與儲存方法相比,呼叫 lambda 表達式需要額外的步驟。但一年內您可能不會注意到任何效能損失,因此不必擔心。

結論

指標是直接指向物件位址而不是值的變數。函數指標直接指向函數位址,可以減少記憶體消耗。Java 沒有指針,但可以使用方法引用或 lambda 表達式來模擬行為。使用方法引用比直接呼叫方法慢,但這並不妨礙它的使用。

Java 中的 indexOf - 如何在 Java 中尋找字串的索引

來源:FreeCodeCamp 字串是用雙引號括起來的一組字元。indexOf方法傳回字串中指定字元或子字串的索引位置。在本文中,我們將了解各種indexOf方法的語法。我們還將查看一些範例,幫助您理解並有效地使用在 Java 程式碼中搜尋字元或子字串的索引。 喝咖啡休息#116。 如何在 Java 中使用函數指標。 Java 中的 indexOf - 如何在 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表示字串中的子字串。
如果您還不明白它是如何運作的,請不要擔心 - 這些範例將使一切變得清晰!

如何在Java中使用indexOf方法

在第一個範例中,我們將尋找字串中一個字元的索引。這將有助於我們理解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
  }
}
在上面的程式碼中,我們得到了傳回給我們的字元“o”的索引,即4。我們有兩個字元“o”,但只回傳了第一個字元的索引。在下面的範例中,我們將看到如何傳回第二個「o」的索引。如果您想知道如何取得序號,您會注意到字串中的第一個字元的索引為零,第二個字元的索引為 1,依此類推。

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」字元。第五個索引是「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方法。我們還了解了每個方法的語法以及它們如何告訴索引返回。此外,我們還能夠了解當不存在的字元或子字串作為參數傳遞時會發生什麼。
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION