Solución de problemas: java.lang.IllegalArgumentException: falta el carácter que se va a escapar

Escenario problemático

Al crear una herramienta de generación de código, debe almacenar el resultado del código correspondiente en src / test / resources y generarlo de acuerdo con la ruta del paquete. Donde la ruta del paquete se .reemplaza como separador de directorio, pruebe el código de la siguiente manera:

import java.io.File;

public class Test {
    
    
    public static void main(String[] args){
    
    
        String packageName = "com.test.aba";
        String path = packageName.replaceAll("\\.", File.separator);
        System.out.println(path);
    }
}

Cuando se solicita informar un error, el mensaje de error es el siguiente:

Exception in thread "main" java.lang.IllegalArgumentException: character to be escaped is missing
	at java.util.regex.Matcher.appendReplacement(Matcher.java:809)
	at java.util.regex.Matcher.replaceAll(Matcher.java:955)
	at java.lang.String.replaceAll(String.java:2223)
	at com.gop.yy.api.web.Test.main(Test.java:15)

Este blog trata principalmente sobre la solución a este problema.

Entorno problemático

software versión
JDK 1.8

causas del problema

En la plataforma de Windows, File.separatorel valor \se reconoce como un carácter de escape cuando se reemplaza, por lo que el parámetro recibido por el ""método es , por lo que el método informa un error.

solución

Para \realizar la conversión, conviértalo en un carácter sin escape. Aquí es necesario utilizar Matcher.quoteReplacementun método, el método se define de la siguiente manera:

java.time.Matcher.quoteReplacement(String s)方法
返回指定String的文字替换String。

参数
s - 要文字化的字符串。

返回值
文字字符串替换。

resultado

El último código es el siguiente:

import java.io.File;

public class Test {
    
    
    public static void main(String[] args){
    
    
        String packageName = "com.test.aba";
        String path = packageName.replaceAll("\\.", Matcher.quoteReplacement(File.separator));
        System.out.println(path);
    }
}

No se informa ningún error durante la operación.

para resumir

Piensa más.

Pedir elogios

Si mi artículo es útil para todos, puede hacer clic en Me gusta o en favorito en la parte inferior del artículo;
si hay una buena discusión, puede dejar un mensaje;
si desea continuar viendo mis artículos futuros, puede hacer clic en Seguirlo
. puede escanear el siguiente código QR para seguirme la cuenta pública: Fengye Zhixuege, ¡mira mi última acción!
Inserte la descripción de la imagen aquí
Adiós

Supongo que te gusta

Origin blog.csdn.net/u013084266/article/details/115014613
Recomendado
Clasificación