JavaRush /Blog Java /Random-ES /Pausa para el café #116. Cómo utilizar punteros de funció...

Pausa para el café #116. Cómo utilizar punteros de función en Java. indexOf en Java - Cómo encontrar el índice de una cadena en Java

Publicado en el grupo Random-ES

Cómo utilizar punteros de función en Java

Fuente: Dev.to Los punteros son objetos que almacenan una dirección de memoria y pueden ahorrar memoria apuntando directamente a un objeto, matriz o dirección variable de destino en lugar de pasar por valor. Desafortunadamente, no existe un concepto "real" de punteros en Java. Pero, afortunadamente para nosotros, existe una solución alternativa que utiliza referencias de métodos y que se acerca mucho a la realidad. Pausa para el café #116.  Cómo utilizar punteros de función en Java.  indexOf en Java - Cómo encontrar el índice de una cadena en Java - 1

Punteros de función

Un puntero de función es un puntero que apunta a la dirección de una función. Algunos casos de uso incluyen la creación de una rutina de devolución de llamada mediante la creación de una función que llama a otra función en función de su ejecución, o el almacenamiento de una matriz de punteros de función para métodos llamados dinámicamente (por ejemplo, el almacenamiento de instrucciones del procesador para un emulador).

Simulación de puntero de función

Hay cuatro tipos de referencias de métodos . Usamos un tipo que se refiere a un método de instancia de un objeto específico. Comencemos definiendo una interfaz que defina las firmas de los métodos a los que apunta.
// Wrapping interface
private interface FunctionPointer {
  // Method signatures of pointed method
  void methodSignature(int a);
}
Luego crearemos métodos con la firma del método de destino.
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);
}
El siguiente paso es crear variables de interfaz contenedora y asignarles métodos. Las variables actuarán como un puntero a la función que se almacenará o ejecutará.
// 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étodo llamado 1 con número entero 3 Método llamado 2 con número entero 2 Método llamado 3 con número entero 5

Usando expresiones Lambda

Las referencias de métodos se pueden asignar mediante expresiones 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);

Matriz de punteros de función

La funcionalidad de una matriz de referencias de métodos se puede emular creando una matriz de interfaz contenedora.
// 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);

Puntero de función vs llamada directa

Si compara ambas opciones, llamar a un método directamente es casi 5 veces más rápido que usar una referencia de método. Todo esto se debe al paso adicional de llamar a una expresión lambda en comparación con un método almacenado. Pero probablemente no notarás ninguna pérdida de rendimiento en un año, así que no te preocupes.

Conclusión

Los punteros son variables que apuntan directamente a la dirección de un objeto en lugar de a un valor. El puntero de función apunta directamente a la dirección de la función, lo que puede reducir el consumo de memoria. Java no tiene punteros, pero puede emular el comportamiento utilizando referencias de métodos o expresiones lambda. Usar una referencia de método es más lento que llamar a un método directamente, pero esto no impide su uso.

indexOf en Java - Cómo encontrar el índice de una cadena en Java

Fuente: FreeCodeCamp Una cadena es un conjunto de caracteres entre comillas dobles. El método indexOf devuelve la posición de índice del carácter o subcadena especificado en una cadena. En este artículo, aprenderemos sobre la sintaxis de varios métodos indexOf . También veremos ejemplos que le ayudarán a comprender y utilizar eficazmente la búsqueda del índice de un carácter o subcadena en código Java. Pausa para el café #116.  Cómo utilizar punteros de función en Java.  indexOf en Java - Cómo encontrar el índice de una cadena en Java - 2

Sintaxis del método indexOf

El método indexOf tiene los siguientes métodos:
public int indexOf(int char)
public int indexOf(int char, int fromIndex)
public int indexOf(String str)
public int indexOf(String str, int fromIndex)
Expliquemos estos parámetros:
  • char representa un carácter por línea.
  • fromIndex especifica la posición en la que debe comenzar la búsqueda del índice de un carácter o subcadena. Esto es importante cuando tiene dos caracteres/cadenas que tienen el mismo valor en una cadena. Con este parámetro, puede indicarle al método indexOf por dónde empezar.
  • str representa una subcadena en una cadena.
No se preocupe si aún no comprende cómo funciona todo: ¡los ejemplos lo aclararán todo!

Cómo utilizar el método indexOf en Java

En el primer ejemplo encontraremos el índice de un carácter en una cadena. Esto nos ayudará a comprender el método public int indexOf(int char) .

Ejemplo del método IndexOf(int Char)

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

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

    // 4
  }
}
En el código anterior, obtuvimos el índice del carácter "o", que es 4. Tenemos dos caracteres "o", pero solo se devolvió el índice del primero. En el siguiente ejemplo veremos cómo podemos devolver el índice de la segunda "o". Si se pregunta cómo se obtienen los números de secuencia, observará que el primer carácter de una cadena tiene un índice de cero, el segundo carácter tiene un índice de uno, y así sucesivamente.

Ejemplo del método indexOf(int Char, Int fromIndex)

Aquí hay un ejemplo que explica el método 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
  }
}
En el ejemplo anterior, le decimos al método indexOf que comience a trabajar en el quinto índice. H => índice 0 e => índice 1 l => índice 2 l => índice 3 0 => índice 4 Tenga en cuenta que el índice 5 no es un carácter “W”. El quinto índice es el espacio entre "Hola" y "Mundo". Por lo tanto, en este código, se ignorarán todos los demás caracteres que preceden al quinto índice. 7 se devuelve como índice del segundo carácter "o".

Ejemplo del método Int indexOf(String Str)

En el siguiente ejemplo, entenderemos cómo funciona el método public int indexOf(String str) , que devuelve el índice de una subcadena.
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
  }
}
Me pregunto cómo recuperamos 11. Debe revisar la última sección para comprender cómo se cuentan los índices y cómo los espacios entre subcadenas también se consideran índices. Tenga en cuenta que cuando se pasa una subcadena como parámetro, el índice devuelto es el índice del primer carácter de la subcadena. 11 es el índice del carácter “b”.

Ejemplo del método indexOf(String Str, Int fromIndex)

El último método es public int indexOf(String str, int fromIndex) , el mismo que el método public int indexOf(int char, int fromIndex) . Devuelve el índice de la posición especificada.
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
  }
}
En este ejemplo, especificamos que el método debería comenzar su trabajo en el quinto índice, que viene después de la primera subcadena for. 21 es el índice de la segunda subcadena de for. Finalmente, cuando pasamos un carácter o subcadena que no está en la cadena, el método indexOf devolverá -1. He aquí un ejemplo:
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
  }
}

Conclusión

En este artículo, aprendimos cómo utilizar los cuatro métodos indexOf , con ejemplos claros. También vimos cómo se ve la sintaxis de cada uno de estos métodos y cómo le indican al índice que regrese. Además, pudimos descubrir qué sucede cuando se pasa como parámetro un carácter o una subcadena inexistente.
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION