String.format java.util.IllegalFormatFlagsException:Flags='#';
我有一个sql查询字符串:String.format java.util.IllegalFormatFlagsException:Flags='#';,java,regex,string,string-formatting,Java,Regex,String,String Formatting,我有一个sql查询字符串: String string = "SELECT 1 FROM store WHERE merch_name like '%#1%'"; 但在后面的代码中,我会对该srting执行String.format,例如: String s1 = String.format( string , ruleBody.getDateTimeStartValue()
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 = '#'
我想我需要添加“%”begore“#”字符,但是我如何检查我的字符串中是否存在任何特殊字符(例如“$”、“@”、“*”),并在它们之前添加“%”,以避免出现这种异常?您必须转义%字母,因为string.format认为您需要在其中指定某些内容。如下所示:
String string = "SELECT 1 FROM store WHERE merch_name like '%%#1%'";
通过使用正则表达式检查特殊字符是否存在
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
执行查询。thx用于反馈,但我的主要问题是“但是我如何检查我的字符串中是否存在任何特殊字符(例如“$”、“@”、“*”),并在它们之前添加转义%字母,以避免该异常?“使用字符串连接来构建查询是一个可怕的想法。你为什么不使用事先准备好的声明呢?