【日期】: 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()方法的使用,字符 “.” “\” “|” “*” “+” “?” 等 是需要转义的。(即:在字符前加“ \\ ”)