【BUG日记】【JAVA】报错 Dangling meta character ‘?‘ near index 0 ?

【日期】: 2020/8/29

【问题】: JAVA报错:Exception in thread “main” java.util.regex.PatternSyntaxException: Dangling meta character ‘?’ near index 0?

【原因】: 使用split方法提取url的参数,字符串中带有某些特殊字符(如:?)时,用直接用该字符分隔字符串成字符数组是不正确的。

        String arr = "www.hao123.com?A=a&B=b&C=c";
        String s[] = arr.split("?");
        System.out.println(s[1]);
        Map<String, String> map = new HashMap<String, String>();
        if (null != s[1]) {
            String[] params = s[1].split("&");
            for (int i = 0; i < params.length; i++) {
                int index = params[i].indexOf('=');
                map.put(params[i].substring(0,index), params[i].substring((index + 1)));
            }
        }
        System.out.println(map.get("A"));
        System.out.println(map.get("B"));
        System.out.println(map.get("C"));

【如何发现】: 百度查询资料。

【如何修复】: 只需要在特殊字符前加两个斜杠就好了。

错误写法:
String s[] = arr.split("?");

正确写法:
String s[] = arr.split("\?");

【总结】: 对于split()方法的使用,字符 “.” “\” “|” “*” “+” “?” 等 是需要转义的。(即:在字符前加“ \\ ”)