web-dev-qa-db-ja.com

String.Formatで%をエスケープする方法は?

Strings.xmlファイルにSQLクエリを格納しています。コードで最終的な文字列を作成するにはString.Formatを使用します。 SELECTステートメントでは、likeを使用しています。

SELECT Field1, Field2 FROM mytable WHERE Field1 LIKE '%something%'

これをフォーマットするために、 'something'を%1 $ sに置き換えます。

SELECT Field1, Field2 FROM mytable WHERE Field1 LIKE \'%%1$s%\'

私はバックスラッシュで一重引用符をエスケープします。ただし、%記号をエスケープすることはできません。

Strings.xmlファイルにlikeステートメントを含めるにはどうすればよいですか?

367
Matthew

%をエスケープするには、それを2倍にする必要があります:%%

791
limc

前述の解決策を補足するには、次のようにします。

str = str.replace("%", "%%");
11
Cavaleiro

これは、入力ですでに倍増されている%%を置き換えない、より強力な正規表現の置き換えです。

str = str.replaceAll("(?:[^%]|\\A)%(?:[^%]|\\z)", "%%");
0
Toilal