2011-06-08 49 views
50

Duplicar posibles:
In Java, is there a way to write a string literal without having to escape quotes?escapar comillas dobles en Java

private static final String CREATE_TABLE_EXHIBITORS = "CREATE TABLE "users" ("_id" text PRIMARY KEY ,"name" text,"body" text,"image" text,"stand_id" text,"begin" long,"end" long,"changedate" long,"website" text,"facebook" text,"myspace" text,"twitter" text,"festivallink" text,"favorite" integer);"; 

Digamos que quiero esta consulta sea una cadena válida en Java. ¿Tengo que convertirlo para escapar de todas las comillas dobles con una barra al frente?

e.g. = "CREATE TABLE \"users"\ 

¿O hay una forma más rápida de hacer que toda esta consulta sea una cadena válida a la vez? Pensé que podrías usar comillas simples alrededor de toda la cadena para hacer eso, pero eso tampoco funciona.

+3

¿No serían válidas las comillas simples en esta declaración SQL? no es necesario escapar en ese caso ... – Gryphius

+0

Las cadenas rodeadas de comillas simples en SQL son literales, es decir, datos, mientras que las cadenas rodeadas de comillas dobles son identificadores, es decir nombres de tabla, nombres de columna, etc. Las comillas dobles solo son necesarias para la columna nombres que de otra manera son ambiguos con palabras clave de SQL como FECHA, NÚMERO, COMENTARIO, etc. – BertNase

+0

¿Qué IDE estás usando? Por ejemplo, en eclipse puede cambiar una configuración para escapar automáticamente de los literales de cadena. –

Respuesta

42

Escapar las comillas dobles con barras diagonales inversas es la única forma de hacerlo en Java.

Algunos entornos de desarrollo de todo como IntelliJ IDEA hacen escapar de forma automática al pegar una cadena de este tipo en una cadena literal (es decir, entre las comillas dobles que rodean una cadena literal java)

Otra opción sería poner la cadena en algunos tipo de archivo de texto que quedaría redactado en tiempo de ejecución

50

uso de replaceAll(String regex, String replacement)

Java por ejemplo, utilice un char sustitución de las comillas y luego que lo sustituya por carbón con \"

String newstring = String.replaceAll("%","\""); 

o reemplazar todas las instancias de \" con \\\"

String newstring = String.replaceAll("\"","\\\""); 
+0

Los argumentos pueden ir al revés –

+1

él quiere poner literalmente la Cadena en el código fuente, que necesita que las comillas sean escapadas por ser una Lite literal compilable válida – BertNase

+3

'String.replaceAll (" \ "", Matcher.quoteReplacement ("\\\" "))' – idelvall

0

Sí tendrá que escapar de todas las comillas dobles por una barra invertida.

3

Para una constante de cadena, no tiene otra opción que escapar por barra invertida.

Quizás le interese el proyecto MyBatis. Es una capa delgada sobre JDBC donde puede externalizar sus consultas SQL en archivos de configuración XML sin la necesidad de evitar comillas dobles.

Cuestiones relacionadas