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:
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); } }
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!"); } } }
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