¿Cómo eliminar la "\ n" en la cadena? ¡El 80% de los estudiantes se equivocan!

Hola a todos, soy Yuskin, hoy compartiré un poco de conocimiento.

Mi trabajo más reciente es diseñar un motor de análisis de SQL. En pocas palabras, consiste en analizar una cadena de expresión SQL en un árbol de objetos para realizar una serie de operaciones, como una consulta.

Principios del análisis sintáctico de SQL

Al principio, me encontré con un gran dolor de cabeza, ¡ la declaración SQL escrita por el usuario puede no ser estándar!

Declaración SQL ideal, la sangría es muy estándar, sin caracteres adicionales:

select * from user;

La realidad suele ser así:

 select * \n
from   user;

La declaración anterior no solo tiene sangría y se ajusta al azar, sino que también contiene muchas cadenas sin sentido, como "\n"!

Por lo tanto, desea un diseño versátil de motor de análisis de SQL, el primero del preprocesamiento de cadenas , la entrada de la estandarización de declaraciones SQL. Como eliminar retornos de carro, avances de línea, espacios redundantes y caracteres especiales.

Esa pregunta es, ¿cómo eliminar todas las cuerdas "\n"que contiene ? Tenga en cuenta que "\n" no se trata de una nueva línea , sino de un carácter '\'y una 'n'cadena de caracteres compuestos.

# 转换前
select * \n 
from user;

# 转换后
select * from user;

Primero pensé en dos ideas:

  1. Escanee cada carácter en secuencia con una declaración de bucle, juzgue si es el carácter actual y el siguiente "\n", y luego elimínelo.
  2. El uso directo del lenguaje Java proporciona replaceAllun método, pasar una expresión regular, una cadena directamente para completar toda la subcadena que coincide con la regular reemplazada por una cadena vacía.

Elijo el último aquí. Es más conveniente usar directamente el método listo para usar y, con la ayuda de poderosas expresiones regulares, se pueden reemplazar múltiples caracteres redundantes al mismo tiempo.

Definición de expresión regular de Java:

/*
 * 全部替换
 * regex 正则表达式
 * replacement 要替换成的新串
 */
public String replaceAll(String regex, String replacement) {
  return Pattern.compile(regex).matcher(this).replaceAll(replacement);
}

Entonces, ¿cómo escribir expresiones regulares, eliminarlas todas "\n"? Aquí inicié una encuesta. Puedes pensar en ello primero y dar tu propia elección.

Los resultados de la votación de todos

Al principio, pensé que era demasiado simple, así que escribí el siguiente código directamente:

str.replaceAll("\n", "");

Como resultado, la cadena no se puede reemplazar sin problemas "\n", ¡solo se elimina el carácter de nueva línea!

El resultado con una sola barra invertida

La razón es simple, constantes de caracteres en Java, la barra invertida (\) es un carácter especial, llamado carácter de escape , su función es seguir un carácter de escape en sí mismo no tiene ningún significado práctico.

Por lo tanto, no puede generar directamente barras invertidas de la siguiente manera:

Informar un error

Si desea generar una barra invertida por separado, debe agregar un escape de barra invertida:

No hay error

Del mismo modo, desea generar una "\n"cadena de código que escribió:

System.out.println("\\n")

Entonces prueba esta expresión regular:

str.replaceAll("\\n", "");

El resultado es inesperado y el efecto es el mismo que cuando solo se usa una barra invertida. Solo se han eliminado los caracteres de nueva línea.

El efecto de usar dos barras invertidas

De hecho, la respuesta correcta sería usar cuatro barras invertidas porque una barra invertida y las expresiones regulares de Java son el carácter de escape.

Cómo quitar el

Entre ellos, la primera barra es el carácter de escape, la segunda barra es la barra en sí, la tercera barra es el carácter de escape y la cuarta barra es la barra en sí.

En Java, la "\n"cadena de salida requiere dos y una barra invertida 'n'en las expresiones regulares de Java, dar dos barras invertidas que escapó de una redistribución, respectivamente, para que surta efecto.

Con todo, recuerde una frase: en las expresiones regulares de Java, se utilizan cuatro barras invertidas para hacer coincidir una barra invertida.


Finalmente, las expresiones regulares son una cuestión universitaria, recomiendo una herramienta de visualización en línea para aprender, crear y probar expresiones regulares, RegExr. ¡Aprenda a través de la práctica y podrá comenzar pronto!

Cómo quitar el

Fuente del artículo: https://mp.weixin.qq.com/s/rNDgr59UTcTCt5NtaLMnKQ

Supongo que te gusta

Origin blog.51cto.com/15016006/2656522
Recomendado
Clasificación