String.format java.util.IllegalFormatFlagsException:Flags ='#'

时间:2015-01-27 13:02:43

标签: 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()
                        }

那给了我例外:

java.util.IllegalFormatFlagsException:  Flags = '#'

我认为我需要添加'%'乞求'#" char,但是如何检查我的字符串中是否存在任何特殊字符(' $',' @',' *'例如),并将添加'%'在他们之前,为了避免这种例外?

2 个答案:

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