web-dev-qa-db-fra.com

Échapper aux guillemets en Java

Dupliquer possible:
En Java, est-il possible d'écrire un littéral de chaîne sans avoir à échapper des guillemets?

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);";

Disons que je veux que cette requête soit une chaîne valide en Java. Dois-je le convertir pour échapper à tous les guillemets avec une barre oblique au début?

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

Ou existe-t-il un moyen plus rapide de transformer cette requête en une chaîne valide en une fois? Je pensais que vous pourriez utiliser des guillemets simples autour de la chaîne entière pour le faire, mais cela ne fonctionne pas non plus.

54
Vincent

Échapper aux guillemets avec des barres obliques inverses est le seul moyen de le faire en Java. 

Certains IDE tels que IntelliJ IDEA font que l'échappement se produit automatiquement lors du collage d'une telle chaîne dans un littéral String (c'est-à-dire entre les guillemets entourant un littéral Java String).

Une autre option serait de placer la chaîne dans une sorte de fichier texte que vous liriez ensuite à l'exécution

43
BertNase

Utilisez replaceAll(String regex, String replacement) de Java

Par exemple, utilisez un caractère de substitution pour les guillemets, puis remplacez ce caractère par \".

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

ou remplacez toutes les instances de \" par \\\"

String newstring = String.replaceAll("\"","\\\"");
54
Stas Jaro

Pour une constante String, vous n'avez pas d'autre choix que de vous échapper via une barre oblique inverse.

Peut-être trouvez-vous le projet MyBatis intéressant. C'est une couche mince sur JDBC où vous pouvez externaliser vos requêtes SQL dans des fichiers de configuration XML sans avoir besoin d'échapper aux guillemets doubles.

2
vanje

Oui, vous devrez échapper à toutes les guillemets doubles par une barre oblique inverse.

0
greydet