String.format java.util.IllegalFormatFlagsException: 标志 = '#'
String.format java.util.IllegalFormatFlagsException: Flags = '#'
我有一个带有 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 = '#'
我认为我需要添加 '%' 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
执行查询。
我有一个带有 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 = '#'
我认为我需要添加 '%' 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
执行查询。