Traductor alfabético de números de teléfono en Java

Sheeraz Gul 12 octubre 2023
  1. Traductor alfabético de números de teléfono en Java
  2. Use regex y la instrucción switch para generar un traductor alfabético de números de teléfono
  3. Use Google Guava para generar un traductor alfabético de números de teléfono
Traductor alfabético de números de teléfono en Java

Este tutorial demuestra cómo generar un traductor alfabético de números de teléfono en Java.

Traductor alfabético de números de teléfono en Java

A veces, las empresas utilizan el formato de número de teléfono como 555-GET-FOOD, que es un proceso estandarizado de escribir un número de teléfono para que sea más fácil de recordar para el cliente. La versión estándar de la letra a números para los números de teléfono es:

A, B, and C = 2
D, E, and F = 3
G, H, and I = 4
J, K, and L = 5
M, N, and O = 6
P, Q, R, and S = 7
T, U, and V = 8
W, X, Y, and Z = 9

Según el escenario anterior, podemos crear un traductor de números de teléfono de números de teléfono alfabéticos a números. Esto se puede lograr a través de diferentes métodos.

Use regex y la instrucción switch para generar un traductor alfabético de números de teléfono

Regex es un paquete en Java que se usa para hacer coincidir el patrón dado, por lo que si el formato de número de teléfono estándar es 123-XXX-XXXX, el patrón de expresión regular para este número será [0-9]{3 }-[a-zA-Z]{3}-[a-zA-Z]{4}, que se utilizará para hacer coincidir el número de teléfono de entrada con el formato estándar.

La instrucción Cambiar se puede utilizar para generar casos en los que se agregará un número a la cadena de números de teléfono en función de las letras y los números proporcionados en la lista anterior. Intentemos implementar este ejemplo:

package delftstack;

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Example {
  public static void main(String[] args) {
    // user input for the phone number
    Scanner PhoneNumber_Input = new Scanner(System.in);

    System.out.println("Please enter a Phone number with the format: (123-XXX-XXXX) ");

    // Convert the phone number to a string
    String Phone_Number = PhoneNumber_Input.nextLine();
    if (Validate_PhoneNumber(Phone_Number)) {
      Phone_Number = Phone_Number.toUpperCase();
      String Translated_PhoneNumber = Translate_PhoneNumber(Phone_Number);
      System.out.println(Translated_PhoneNumber);
    } else {
      System.out.println("Wrong phone number format.");
      return;
    }
  }

  private static boolean Validate_PhoneNumber(String Phone_Number) {
    Pattern Number_Pattern = Pattern.compile("[0-9]{3}-[a-zA-Z]{3}-[a-zA-Z]{4}");

    // Create The matcher object.
    Matcher Number_Matcher = Number_Pattern.matcher(Phone_Number);
    if (Number_Matcher.find()) {
      return true;
    }
    return false;
  }

  public static String Translate_PhoneNumber(String Phone_Number) {
    String Phone_Number_Result = "123-";
    String Phone_Number_Suffix = Phone_Number.substring("123-".length());
    for (int i = 0; i < Phone_Number_Suffix.length(); i++) {
      char Number_Character = Phone_Number_Suffix.charAt(i);
      if (Character.isLetter(Number_Character)) {
        switch (Number_Character) {
          case 'A':
          case 'B':
          case 'C':
            Phone_Number_Result += "2";
            break;
          case 'D':
          case 'E':
          case 'F':
            Phone_Number_Result += "3";
            break;
          case 'G':
          case 'H':
          case 'I':
            Phone_Number_Result += "4";
            break;
          case 'J':
          case 'K':
          case 'L':
            Phone_Number_Result += "5";
            break;
          case 'M':
          case 'N':
          case 'O':
            Phone_Number_Result += "6";
            break;
          case 'P':
          case 'Q':
          case 'R':
          case 'S':
            Phone_Number_Result += "7";
            break;
          case 'T':
          case 'U':
          case 'V':
            Phone_Number_Result += "8";
            break;
          case 'W':
          case 'X':
          case 'Y':
          case 'Z':
            Phone_Number_Result += "9";
            break;
        }
      } else if (Number_Character == '-') {
        Phone_Number_Result += "-";
      }
    }
    return Phone_Number_Result;
  }
}

El código anterior contiene tres métodos, el primero es el método principal, el segundo es el método para validar el número de teléfono según el método regex y el tercero es traducir el número de teléfono. Ver la salida:

Please enter a Phone number with the format: (123-XXX-XXXX)
444-CAT-GOOD
123-228-4663

Como podemos ver, el número de teléfono 444-CAT-GOOD se traduce como 123-228-4663.

Use Google Guava para generar un traductor alfabético de números de teléfono

Google Guava es una biblioteca para Java que proporciona muchas operaciones. Guava incluye ImmutableMultimap, que se puede utilizar para almacenar los datos según el formato descrito en la lista anterior.

Este ImmutableMultimap luego se usará con el Splitter de la biblioteca guava con la sintaxis de función en línea de Java 8 para generar un número de teléfono a partir del número de entrada con letras.

Asegúrese de que la biblioteca de Google Guava se agregue a su entorno. Intentemos implementar un ejemplo basado en el escenario anterior:

package delftstack;

import com.google.common.base.Splitter;
import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.Lists;
import java.util.List;
import java.util.Scanner;
import java.util.stream.Collectors;

public class Example {
  public static void main(String[] args) {
    ImmutableMultimap<String, String> Translate_PhoneNumber =
        new ImmutableMultimap.Builder<String, String>()
            .putAll("2", Lists.<String>newArrayList("A", "B", "C"))
            .putAll("3", Lists.<String>newArrayList("D", "E", "F"))
            .putAll("4", Lists.<String>newArrayList("G", "H", "I"))
            .putAll("5", Lists.<String>newArrayList("J", "K", "L"))
            .putAll("6", Lists.<String>newArrayList("M", "N", "O"))
            .putAll("7", Lists.<String>newArrayList("P", "Q", "R", "S"))
            .putAll("8", Lists.<String>newArrayList("T", "U", "V"))
            .putAll("9", Lists.<String>newArrayList("W", "X", "Y", "Z"))
            .build();
    // Get the user input
    Scanner Input_PhoneNumber = new Scanner(System.in);
    System.out.print("Enter a phone number with the format (123-XXX-XXXX): ");

    // Put the phone number into a string
    String Phone_Number = Input_PhoneNumber.nextLine();
    // close scanner
    Input_PhoneNumber.close();

    // Use Guava Splitter
    List<String> Converted_PhoneNumber =
        Splitter.fixedLength(1)
            .splitToList(Phone_Number)
            .stream()
            .map(t -> {
              if (Character.isAlphabetic(t.codePointAt(0))) {
                return Translate_PhoneNumber.inverse().get(t).asList().get(0);
              } else {
                return t;
              }
            })
            .collect(Collectors.toList());

    System.out.println(String.join("", Converted_PhoneNumber));
  }
}

El código anterior primero crea un ImmutableMultimap con la información de la letra y el número según el escenario estándar y luego usa el Splitter con la sintaxis de la función en línea de Java 8 para traducir el número de teléfono alfabético. Ver salida:

Enter a phone number with the format (123-XXX-XXXX): 444-CAT-GOOD
444-228-4663
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook