解析字符串返回map键值对(例:a=1&b=2 => a=1,b=2) @param query 源参数字符串 @param split1 键值对之间的分隔符(例:&) @param split2 key与value之间的分隔符(例:=) @param dupLink 重复参数名的参数值之间的连接符,连接后的字符串作为该参数的参数值,可为null null:不允许重复参数名出现,则靠后的参数值会覆盖掉靠前的参数值。 @return map
(String query, char split1, char split2, String dupLink)
| 584 | * @return map |
| 585 | */ |
| 586 | public static Map<String, String> parseQuery(String query, char split1, char split2, String dupLink) { |
| 587 | if (!StringUtil.isEmpty(query) && query.indexOf(split2) > 0) { |
| 588 | Map<String, String> result = new HashMap<>(); |
| 589 | |
| 590 | String name = null; |
| 591 | String value = null; |
| 592 | String tempValue = ""; |
| 593 | int len = query.length(); |
| 594 | for (int i = 0; i < len; i++) { |
| 595 | char c = query.charAt(i); |
| 596 | if (c == split2) { |
| 597 | value = ""; |
| 598 | } else if (c == split1) { |
| 599 | if (!StringUtil.isEmpty(name) && value != null) { |
| 600 | if (dupLink != null) { |
| 601 | tempValue = result.get(name); |
| 602 | if (tempValue != null) { |
| 603 | value += dupLink + tempValue; |
| 604 | } |
| 605 | } |
| 606 | result.put(name, value); |
| 607 | } |
| 608 | name = null; |
| 609 | value = null; |
| 610 | } else if (value != null) { |
| 611 | value += c; |
| 612 | } else { |
| 613 | name = (name != null) ? (name + c) : "" + c; |
| 614 | } |
| 615 | } |
| 616 | |
| 617 | if (!StringUtil.isEmpty(name) && value != null) { |
| 618 | if (dupLink != null) { |
| 619 | tempValue = result.get(name); |
| 620 | if (tempValue != null) { |
| 621 | value += dupLink + tempValue; |
| 622 | } |
| 623 | } |
| 624 | result.put(name, value); |
| 625 | } |
| 626 | |
| 627 | return result; |
| 628 | } |
| 629 | return null; |
| 630 | } |
| 631 | |
| 632 | /** |
| 633 | * 解析http请求URI |