Clase PatternSyntaxException en Java

Java usa la API java.util.regex para la coincidencia de patrones con expresiones regulares. Para indicar cualquier error de sintaxis en un patrón de expresión regular, Java proporciona una clase llamada PatternSyntaxException .

Clase PatternSyntaxException en Java:

Al escribir expresiones regulares, para identificar y arrojar cualquier error sintáctico en el patrón, se usa la clase PatternSyntaxException . Esta es una excepción no verificada disponible en el paquete java.util.regex de la versión java 1.4.

Sintaxis:

public class PatternSyntaxException extends IllegalArgumentException implements Serializable

Jerarquía de la clase PatternSyntaxException:

Jerarquía de la clase PatternSyntaxException

El constructor de la clase PatternSyntaxException:

Para construir una nueva instancia de la clase PatternSyntaxException.

Sintaxis:

PatternSyntaxException(String desc, String regex, int index)

Parámetros:

  • desc: Descripción del error.
  • regex: El patrón que es incorrecto.
  • índice: el índice aproximado del error en el patrón de expresiones regulares, o -1 si no se conoce el índice.

Métodos en la clase PatternSyntaxException

S. No. Nombre del método modificador Descripción
1 obtenerÍndice() En t Devuelve el índice aproximado del error en el patrón, o -1 si no se conoce el índice.
2 obtenerDescripción() Cuerda Devuelve la descripción del error en el patrón.
3 obtener mensaje() Cuerda Devuelve la descripción del error de sintaxis en el patrón y su índice, el patrón de expresión regular incorrecto y una indicación visual del índice de error dentro del patrón en un mensaje completo y detallado.
4 obtenerPatrón() Cuerda Devuelve el patrón de expresión regular que es incorrecto.

Métodos heredados de la clase java.lang.Throwable

Como la clase PatternSyntaxException se extiende desde la clase Throwable, los siguientes métodos se heredan de ella.

S. No. Nombre del método modificador Descripción
1. addSuppressed (excepción arrojable) vacío Este método es seguro para subprocesos, lo que agrega la excepción especificada a las excepciones que se suprimieron para entregar esta excepción.
2. obtenerCausa() arrojable Devuelve la causa de este throwable o nulo si la causa es inexistente o desconocida. 
3. obtenerStackTrace() StackTraceElement[] Proporciona acceso programático a la información de seguimiento de la pila impresa por el método printStackTrace() .
4. initCause (causa descartable) arrojable Este método inicializa la causa de este arrojable al valor especificado.
5. printStackTrace(PrintStream s) vacío El método imprime este arrojable y su seguimiento al flujo de impresión especificado.
6. setStackTrace(StackTraceElement[] stackTrace) vacío Este método está diseñado para que lo utilicen marcos RPC y otros sistemas avanzados que permiten al cliente anular el seguimiento de pila predeterminado. Establece los elementos de seguimiento de la pila que serán devueltos por getStackTrace() e impresos por printStackTrace() y métodos relacionados.
7. llenarInStackTrace() arrojable Este método registra dentro de este objeto Throwable información sobre el estado actual de los marcos de pila para el subproceso actual y completa el seguimiento de la pila de ejecución.
8. obtenerMensajeLocalizado() Cuerda Este método crea una descripción localizada de este arrojable.
9. getSuppressed() Lanzable[] Devuelve una array que contiene todas las excepciones que se suprimieron para entregar esta excepción.
10 imprimirStackTrace() vacío Imprime este arrojable y su seguimiento al flujo de error estándar.
11 printStackTrace(PrintWriter s) vacío Imprime este arrojable y su seguimiento hacia el escritor de impresión especificado.
12 Enstringr() Cuerda Devuelve una breve descripción de este arrojable con el nombre de la clase de este objeto, “:” (dos puntos y un espacio), y el resultado de invocar el método getLocalizedMessage() de este objeto.

Métodos heredados de la clase java.lang.Object

Como la clase PatternSyntaxException se extiende desde la clase Object, los siguientes métodos se heredan de ella.

S. No. Nombre del método modificador Descripción
1. es igual a (Objeto obj) booleano Indica si algún otro objeto es “igual a” este o no.
2. Espere() vacío Hace que el subproceso actual espere hasta que otro subproceso invoque el método de notificación() o el método de notificación() para este objeto.
3. esperar (tiempo de espera prolongado) vacío Hace que el subproceso actual espere hasta que otro subproceso invoque el método de notificación() o el método de notificación() para este objeto, o hasta que haya transcurrido la cantidad de tiempo que se especifica en el parámetro.
4. notificar a todos() vacío Despierta todos los subprocesos que están esperando en el monitor de este objeto.
5. código hash() En t Devuelve un valor de código hash para este objeto.
6. clon() objeto protegido Crea y devuelve una copia de este objeto.
7. finalizar() vacío protegido Lo llama el recolector de basura en un objeto cuando la recolección de basura determina que no hay más referencias al objeto. Podemos realizar acciones de limpieza antes de que el objeto se descarte irrevocablemente.
8. esperar (tiempo de espera prolongado, int nanos) vacío Hace que el subproceso actual espere hasta que otro subproceso invoque el método de notificación() o el método de notificación a todos() para este objeto, o algún otro subproceso interrumpe el subproceso actual, o ha transcurrido una cierta cantidad de tiempo real que se especifica.
9. notificar()  vacío Despierta un solo hilo que está esperando en el monitor de este objeto.
10 obtenerClase() Clase<?> Devuelve la clase de tiempo de ejecución de este Objeto. El objeto Class devuelto es el objeto que está bloqueado por métodos sincronizados estáticos de la clase representada.

Ejemplo 1: cree una clase «Demo1 » para reemplazar todos los caracteres no alfanuméricos con espacios en el mensaje dado usando la expresión regular.

Java

// Java program to demonstrate the working
// of PatternSyntaxException class methods
  
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
  
public class Demo1 {
    private static String REGEX = "?[^a-zA-Z0-9]";
    private static String MSG
        = "Learn/ java? in GeeksforGeeks!!";
    private static String REPLACE = " ";
  
    public static void main(String[] args)
    {
  
        try {
            // Get Pattern class object to compile the
            // regular expression.
            Pattern pattern = Pattern.compile(REGEX);
  
            // Get a matcher object
            Matcher matcher = pattern.matcher(MSG);
  
            // Using matcher object, replace the string
            MSG = matcher.replaceAll(REPLACE);
  
            // catch block to handle PatternSyntaxException.
        }
        catch (PatternSyntaxException pse) {
            System.out.println("PatternSyntaxException: ");
            System.out.println("Description: "
                               + pse.getDescription());
            System.out.println("Index: " + pse.getIndex());
            System.out.println("Message: "
                               + pse.getMessage());
            System.out.println("Pattern: "
                               + pse.getPattern());
            System.exit(0);
        }
  
        System.out.println("Output: " + MSG);
    }
}
Producción

PatternSyntaxException: 
Description: Dangling meta character '?'
Index: 0
Message: Dangling meta character '?' near index 0
?[^a-zA-Z0-9]
^
Pattern: ?[^a-zA-Z0-9]
  • En este ejemplo, estamos tratando de reemplazar todos los caracteres no alfanuméricos con un espacio.
  • Pero en expresiones regulares, hay ‘ ? ‘ que está causando el error. Siempre que estemos trabajando con metacaracteres como ‘ + ‘,’ * ‘,’ ? ‘, debemos ser más cuidadosos y debemos usar caracteres de escape.
  • Como está causando el error, podemos ver los detalles de la excepción con el índice y el patrón de expresiones regulares en la salida.

Ejemplo 2: Cree una clase « Demo2 » para encontrar el patrón coincidente en el mensaje dado.

Java

// Java program to demonstrate the working
// of PatternSyntaxException class methods
  
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
  
public class Demo2 {
  
    private static String REGEX = "[Geek";
    private static String MSG
        = "Hi Geek, Welcome to GeeksforGeeks!!";
  
    public static void main(String[] args)
    {
  
        Pattern pattern = null;
        Matcher matcher = null;
        try {
            pattern = Pattern.compile(REGEX);
            matcher = pattern.matcher(MSG);
        }
        catch (PatternSyntaxException pse) {
            System.out.println("PatternSyntaxException: ");
            System.out.println("Pattern: "
                               + pse.getPattern());
            System.out.println("Description: "
                               + pse.getDescription());
            System.out.println("Message: "
                               + pse.getMessage());
            System.out.println("Index: " + pse.getIndex());
            System.exit(0);
        }
        boolean found = false;
        while (matcher.find()) {
            System.out.println("Found the text at "
                               + matcher.start());
            found = true;
        }
        if (!found) {
            System.out.println("No match found!");
        }
    }
}
Producción

PatternSyntaxException: 
Pattern: [Geek
Description: Unclosed character class
Message: Unclosed character class near index 4
[Geek
    ^
Index: 4

Nota: 

  • Este es un error común en el que el programador ha olvidado el paréntesis de cierre en la expresión regular.
  • Entonces, la salida muestra los detalles completos con el mensaje de error y el índice del mismo.

Publicación traducida automáticamente

Artículo escrito por yaminitalisetty y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *