JavaRush /Blog Java /Random-FR /Pause café #116. Comment utiliser les pointeurs de foncti...

Pause café #116. Comment utiliser les pointeurs de fonction en Java. indexOf en Java - Comment trouver l'index d'une chaîne en Java

Publié dans le groupe Random-FR

Comment utiliser les pointeurs de fonction en Java

Source : Les pointeurs Dev.to sont des objets qui stockent une adresse mémoire et peuvent économiser de la mémoire en pointant directement vers un objet cible, un tableau ou une adresse variable au lieu de passer par valeur. Malheureusement, il n’existe pas de « vrai » concept de pointeurs en Java. Mais heureusement pour nous, il existe une solution de contournement utilisant des références de méthodes proches de la réalité. Pause café #116.  Comment utiliser les pointeurs de fonction en Java.  indexOf en Java - Comment trouver l'index d'une chaîne en Java - 1

Pointeurs de fonction

Un pointeur de fonction est un pointeur qui pointe vers l'adresse d'une fonction. Certains cas d'utilisation incluent la création d'une routine de rappel en créant une fonction qui appelle une autre fonction en fonction de son exécution, ou le stockage d'un tableau de pointeurs de fonction pour les méthodes appelées dynamiquement (par exemple, le stockage des instructions de processeur pour un émulateur).

Simulation de pointeur de fonction

Il existe quatre types de références de méthodes . Nous utilisons un type qui fait référence à une méthode d'instance d'un objet spécifique. Commençons par définir une interface qui définit les signatures des méthodes vers lesquelles vous pointez.
// Wrapping interface
private interface FunctionPointer {
  // Method signatures of pointed method
  void methodSignature(int a);
}
Ensuite nous créerons des méthodes avec la signature de la méthode cible.
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);
}
L'étape suivante consiste à créer des variables d'interface wrapper et à leur attribuer des méthodes. Les variables agiront comme un pointeur vers la fonction à stocker ou à exécuter.
// 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);
Méthode appelée 1 avec un entier 3 Méthode appelée 2 avec un entier 2 Méthode appelée 3 avec un entier 5

Utilisation d'expressions Lambda

Les références de méthode peuvent être attribuées à l'aide d'expressions 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);

Tableau de pointeurs de fonction

La fonctionnalité d'un tableau de références de méthodes peut être émulée en créant un tableau d'interface wrapper.
// 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);

Pointeur de fonction vs appel direct

Si vous comparez les deux options, appeler directement une méthode est presque 5 fois plus rapide que d’utiliser une référence de méthode. Tout cela est dû à l'étape supplémentaire consistant à appeler une expression lambda par rapport à une méthode stockée. Mais vous ne remarquerez probablement aucune perte de performances en un an, alors ne vous inquiétez pas.

Conclusion

Les pointeurs sont des variables qui pointent directement vers l'adresse d'un objet plutôt que vers une valeur. Le pointeur de fonction pointe directement vers l'adresse de fonction, ce qui peut réduire la consommation de mémoire. Java n'a pas de pointeurs, mais peut émuler un comportement à l'aide de références de méthode ou d'expressions lambda. L’utilisation d’une référence de méthode est plus lente que l’appel direct d’une méthode, mais cela n’empêche pas son utilisation.

indexOf en Java - Comment trouver l'index d'une chaîne en Java

Source : FreeCodeCamp Une chaîne est un ensemble de caractères entourés de guillemets doubles. La méthode indexOf renvoie la position d'index du caractère ou de la sous-chaîne spécifié dans une chaîne. Dans cet article, nous découvrirons la syntaxe des différentes méthodes indexOf . Nous examinerons également des exemples qui vous aideront à comprendre et à utiliser efficacement la recherche de l'index d'un caractère ou d'une sous-chaîne dans le code Java. Pause café #116.  Comment utiliser les pointeurs de fonction en Java.  indexOf en Java - Comment trouver l'index d'une chaîne en Java - 2

Syntaxe de la méthode indexOf

La méthode indexOf a les méthodes suivantes :
public int indexOf(int char)
public int indexOf(int char, int fromIndex)
public int indexOf(String str)
public int indexOf(String str, int fromIndex)
Expliquons ces paramètres :
  • char représente un caractère par ligne.
  • fromIndex spécifie la position à laquelle la recherche de l'index d'un caractère ou d'une sous-chaîne doit commencer. Ceci est important lorsque vous avez deux caractères/chaînes qui ont la même valeur dans une chaîne. Avec ce paramètre, vous pouvez indiquer à la méthode indexOf par où commencer.
  • str représente une sous-chaîne dans une chaîne.
Ne vous inquiétez pas si vous ne comprenez pas encore comment tout cela fonctionne : les exemples vous montreront tout clair !

Comment utiliser la méthode indexOf en Java

Dans le premier exemple nous trouverons l'index d'un caractère dans une chaîne. Cela nous aidera à comprendre la méthode public int indexOf(int char) .

Exemple de méthode IndexOf(int Char)

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

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

    // 4
  }
}
Dans le code ci-dessus, nous avons obtenu l'index du caractère « o » qui nous a été renvoyé, qui est 4. Nous avons deux caractères « o », mais seul l'index du premier a été renvoyé. Dans l'exemple suivant, nous verrons comment renvoyer l'index du deuxième "o". Si vous vous demandez comment sont obtenus les numéros de séquence, vous remarquerez que le premier caractère d'une chaîne a un indice de zéro, le deuxième caractère un indice de un, et ainsi de suite.

Exemple de la méthode indexOf(int Char, Int fromIndex)

Voici un exemple expliquant la méthode 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
  }
}
Dans l'exemple ci-dessus, nous disons à la méthode indexOf de commencer à travailler au cinquième index. H => index 0 e => index 1 l => index 2 l => index 3 0 => index 4 Notez que l'index 5 n'est pas un caractère « W ». Le cinquième index est l'espace entre « Hello » et « World ». Ainsi, dans ce code, tous les autres caractères précédant le cinquième index seront ignorés. 7 est renvoyé comme index du deuxième caractère « o ».

Exemple de la méthode Int indexOf(String Str)

Dans l'exemple suivant, nous comprendrons comment fonctionne la méthode public int indexOf(String str) , qui renvoie l'index d'une sous-chaîne.
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
  }
}
Je me demande comment nous avons récupéré le 11 ? Vous devriez consulter la dernière section pour comprendre comment les index sont comptés et comment les espaces entre les sous-chaînes sont également considérés comme des indices. Notez que lorsqu'une sous-chaîne est passée en paramètre, l'index renvoyé est l'index du premier caractère de la sous-chaîne. 11 est l'index du caractère «b».

Exemple de la méthode indexOf(String Str, Int fromIndex)

La dernière méthode est public int indexOf(String str, int fromIndex) - la même que la méthode public int indexOf(int char, int fromIndex) . Il renvoie l'index à partir de la position spécifiée.
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
  }
}
Dans cet exemple, nous avons précisé que la méthode doit commencer son travail au cinquième index, qui vient après la première sous-chaîne de. 21 est l'index de la deuxième sous-chaîne de for. Enfin, lorsque nous passons un caractère ou une sous-chaîne qui ne figure pas dans la chaîne, la méthode indexOf renverra -1. Voici un exemple :
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
  }
}

Conclusion

Dans cet article, nous avons appris à utiliser les quatre méthodes indexOf , avec des exemples clairs. Nous avons également vu à quoi ressemble la syntaxe de chacune de ces méthodes et comment elles indiquent à l'index de revenir. De plus, nous avons pu découvrir ce qui se passe lorsqu’un caractère ou une sous-chaîne inexistante est passé en paramètre.
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION