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执行查询。