web-dev-qa-db-ja.com

Javaで二重引用符をエスケープします

可能性のある複製:
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);";

このクエリをJavaの有効な文字列にしたいとします。前にスラッシュを付けてすべての二重引用符をエスケープするには、変換する必要がありますか?

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

または、このクエリ全体を一度に有効な文字列にするより速い方法はありますか?それには文字列全体を一重引用符で囲むことができると思いましたが、それも機能しません。

55
Vincent

Javaでこれを行う唯一の方法は、二重引用符をバックスラッシュでエスケープすることです。

IntelliJ IDEA などのいくつかのIDEは、このような文字列を文字列リテラルに貼り付けるときに自動的にエスケープします(つまり、Java文字列リテラルを囲む二重引用符の間)

もう1つのオプションは、実行時に読み取るテキストファイルに文字列を配置することです。

45
BertNase

Javaの replaceAll(String regex, String replacement) を使用

たとえば、引用符に置換文字を使用し、その文字を\"に置き換えます

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

または\"のすべてのインスタンスを\\\"に置き換えます

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

文字列定数の場合、バックスラッシュを介してエスケープする以外に選択肢はありません。

MyBatis プロジェクトが面白いと思うかもしれません。これは、二重引用符をエスケープする必要なく、XML構成ファイルでSQLクエリを外部化できるJDBC上の薄いレイヤーです。

2
vanje

はい、すべての二重引用符をバックスラッシュでエスケープする必要があります。

0
greydet