Comprobar si la cadena contiene números en Java

Shikha Chaudhary 12 octubre 2023
  1. Comprobar si la cadena contiene números en Java
  2. Use el método matches() para verificar si la cadena contiene números en Java
  3. Use el método replaceAll() para verificar si la cadena contiene números en Java
  4. Use el método isDigit() para verificar si la cadena contiene números en Java
  5. Conclusión
Comprobar si la cadena contiene números en Java

Este artículo analiza las diversas formas de encontrar un número a partir de una cadena en Java.

Comprobar si la cadena contiene números en Java

En Java, una cadena es simplemente una secuencia de caracteres o un array de caracteres. Sin embargo, también puede contener valores numéricos. Una cadena se parece a esto.

String a = "Hello World!";

Si ponemos algunos valores numéricos, la cadena se verá así.

String a = "This is 123";

Tenga en cuenta que poner valores numéricos en una cadena no es ilegal. Mira el siguiente programa, por ejemplo.

import java.util.*;
public class Demo {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);

    // Asking for a string input
    System.out.println("How may we help you?");
    String a = sc.nextLine();

    System.out.println("Okay, thank you!");
  }
}

Producción :

How may we help you?
Find the cube of 10
Okay, thank you!

Tenga en cuenta que el programa funciona bien aunque el usuario haya ingresado un valor numérico dentro de la cadena. Pero esto lleva a situaciones en las que podríamos necesitar averiguar si un número está presente en una cadena o no.

Este artículo analizará algunas formas de hacerlo.

Java tiene una clase, la clase String de Java, que tiene muchos métodos para manipular cadenas de Java de diferentes maneras. Para averiguar la presencia de un número en una cadena, podemos usar algunos de los métodos integrados proporcionados por la biblioteca de Java.

Pero antes de comenzar, como requisito previo, también debemos saber sobre regex o expresiones regulares. Regex o expresiones regulares es una API que ayuda a editar, cambiar o manipular cadenas en Java. Funciona en base a patrones de cuerdas.

Regex se usa principalmente para validar direcciones de correo electrónico y verificar si una contraseña cumple con las restricciones básicas. El paquete java.util.regex ayuda con las expresiones regulares.

Este paquete tiene tres clases principales para diferentes propósitos.

  • util.regex.Pattern: se utiliza para definir patrones de cadenas
  • util.regex.Matcher: utiliza patrones para realizar operaciones de coincidencia
  • PatternSyntaxException: Indica cualquier error de sintaxis presente en una expresión regular

Para saber más sobre expresiones regulares y patrones en Java, consulte esta documentación.

Use el método matches() para verificar si la cadena contiene números en Java

El método java string matches() comprueba si una cadena coincide con la expresión regular dada. Podemos usarlo de dos maneras diferentes.

string.matches(regex)

O

Pattern.matches(regex, string)

Obtenemos el mismo resultado usando cualquiera de las formas anteriores. Veamos un ejemplo.

import java.io.*;
public class Demo {
  public static void main(String args[]) {
    String Str = new String("We will learn about regular expressions");

    System.out.println(Str.matches("(.*)regular(.*)"));

    System.out.println(Str.matches("expressions"));

    System.out.println(Str.matches("We(.*)"));
  }
}

Producción :

true
false
true

Debe preguntarse que aunque la palabra expressions está presente en la cadena, la salida que obtenemos es falsa. Usamos un punto y un asterisco en los otros dos patrones.

El uso de un punto . coincidirá con cualquier carácter pero no con un carácter de nueva línea. Por ejemplo, .article coincide con particle pero no con article.

El asterisco *, en cambio, se utiliza para repetir expresiones. Para hacer coincidir una serie de cero o más caracteres, usamos el símbolo .*.

Veamos cómo podemos encontrar si una cadena tiene un número.

import java.io.*;
public class Demo {
  public static void main(String args[]) {
    String Str = new String("The string has the number 10.");

    // Using regular expressions
    System.out.println(Str.matches("(.*)10(.*)"));
  }
}

Producción :

true

Tenga en cuenta que cambiamos la última línea y todavía obtenemos el mismo resultado. Aquí, el .* encuentra la aparición de un carácter de 0 a infinito.

Luego, la doble barra invertida escapa de la segunda barra invertida para encontrar un dígito de 1 a infinitas veces.

También podemos reemplazar la \\d por [0-9]. Mira el código para la demostración.

import java.io.*;
public class Demo {
  public static void main(String args[]) {
    String Str = new String("The string has the number 10.");

    System.out.println(Str.matches(".*[0-9].*"));
  }
}

Producción :

true

Todos estos métodos devuelven el resultado solo en valores booleanos. Otras formas pueden dar el número como salida.

Para obtener más información sobre la clase Matcher en Java, consulte esta documentación.

Use el método replaceAll() para verificar si la cadena contiene números en Java

Este método proporciona no solo uno sino todos los números presentes en una cadena. Aquí, seguimos un enfoque de tres pasos.

Primero, reemplazamos los caracteres no numéricos con un espacio. A continuación, fusionamos espacios consecutivos en un solo espacio y, por último, descartamos los espacios finales de modo que la cadena restante contenga solo números.

public class Demo {
  static String FindInt(String str) {
    // First we replace all the non-numeric characters with space
    str = str.replaceAll("[^\\d]", " ");

    // Remove all the trailing spaces
    str = str.trim();

    // Replace consecutive white spaces with one white space
    str = str.replaceAll(" +", " ");

    if (str.equals(""))
      return "-1";

    return str;
  }
  public static void main(String[] args) {
    String str = "gibberish123gibberish 456";
    System.out.print(FindInt(str));
  }
}

Producción :

123 456

Usamos el método replaceAll(), que toma la cadena regex y la cadena de reemplazo. Devuelve una cadena que reemplaza los caracteres que coinciden con la expresión regular y la cadena de reemplazo.

Sintaxis:

string.replaceAll(String regex, String replacement)

Luego usamos el método trim() para descartar los espacios iniciales y finales. Java lo hace con la ayuda del valor Unicode del espacio \u0020.

Tenga en cuenta que el método trim() no elimina los espacios entre la cadena. Solo verifica los espacios al final y al comienzo de la cadena.

Sintaxis:

string.trim()

Use el método isDigit() para verificar si la cadena contiene números en Java

Para encontrar un número entero de una cadena, podemos usar esta función integrada llamada isDigit(). Pero antes de esto, tenemos que convertir la cadena en un array de caracteres. Mira el ejemplo.

public class Demo {
  public static void main(String args[]) {
    String example = "Find the square of 10";
    char[] ch = example.toCharArray();
    StringBuilder strbuild = new StringBuilder();
    for (char c : ch) {
      if (Character.isDigit(c)) {
        strbuild.append(c);
      }
    }
    System.out.println(strbuild);
  }
}

Producción :

10

Primero usamos el método toCharArray() para convertir la cadena en un array de caracteres. La longitud del array recién asignada y la cadena anterior es la misma.

Sintaxis:

string.toCharArray()

Luego, podemos usar el método isDigit() en cada elemento del array para encontrar si la cadena tiene algún número.

Conclusión

En este artículo, vimos cómo encontrar un número a partir de una cadena en Java. Para hacer esto, podemos usar expresiones regulares de muchas maneras. Pero regex da la salida como un valor booleano.

Para obtener la salida como un número, podemos usar el método replaceAll() con el método trim(). También podemos usar el método Java isDigit() para encontrar números de una cadena.

Artículo relacionado - Java String