Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String.format java.util.IllegalFormatFlagsException:Flags='#';_Java_Regex_String_String Formatting - Fatal编程技术网

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

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()

我有一个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
执行查询。

thx用于反馈,但我的主要问题是“但是我如何检查我的字符串中是否存在任何特殊字符(例如“$”、“@”、“*”),并在它们之前添加转义%字母,以避免该异常?“使用字符串连接来构建查询是一个可怕的想法。你为什么不使用事先准备好的声明呢?