我有一个带有SQL查询的字符串:
String string = "SELECT 1 FROM store WHERE merch_name like '%#1%'";
但后来在代码中,我对该srting执行了String.format,例如:
String s1 = String.format(
string ,
ruleBody.getDateTimeStartValue()
}
那给了我例外:
java.util.IllegalFormatFlagsException: Flags = '#'
我认为我需要添加'%'乞求'#" char,但是如何检查我的字符串中是否存在任何特殊字符(' $',' @',' *'例如),并将添加'%'在他们之前,为了避免这种例外?
答案 0 :(得分:1)
你必须转义%字母,因为String.format认为你想在那里指定一些东西。像这样:
String string = "SELECT 1 FROM store WHERE merch_name like '%%#1%'";
答案 1 :(得分:0)
使用正则表达式检查是否存在特殊字符。
String query = "SELECT 1 FROM store WHERE merch_name like '%#1%'";
Pattern p = Pattern.compile("[^a-z0-9 ]", Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(query);
boolean b = m.find();
String string = null;
if (b){
// escape special character with `%`
string = "SELECT 1 FROM store WHERE merch_name like '%%#1%'";
}else{
string = query;
}
然后使用string
执行查询。