UrlUtil.java 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. package cn.com.qmth.examcloud.commons.util;
  2. import java.io.UnsupportedEncodingException;
  3. import java.net.URLDecoder;
  4. import java.net.URLEncoder;
  5. import java.util.HashMap;
  6. import java.util.Map;
  7. import java.util.Map.Entry;
  8. /**
  9. * url 处理工具
  10. *
  11. * @author WANGWEI
  12. */
  13. public class UrlUtil {
  14. /**
  15. * 获取url参数
  16. *
  17. * @author WANG WEI
  18. *
  19. * @param str
  20. * @return
  21. */
  22. public static Map<String, String> getUrlParams(String url) {
  23. Map<String, String> params = new HashMap<String, String>();
  24. try {
  25. int indexOf = url.lastIndexOf('?');
  26. if (0 < indexOf) {
  27. url = url.substring(indexOf + 1);
  28. }
  29. String[] pairs = url.trim().split("&");
  30. for (String pair : pairs) {
  31. String[] kv = pair.split("=");
  32. if (2 != kv.length) {
  33. continue;
  34. }
  35. params.put(kv[0], URLDecoder.decode(kv[1], "UTF-8"));
  36. }
  37. } catch (Exception e) {
  38. throw new RuntimeException(e);
  39. }
  40. return params;
  41. }
  42. /**
  43. * 编码
  44. *
  45. * @author WANGWEI
  46. * @param s
  47. * @return
  48. */
  49. public static String encode(String s) {
  50. return encode(s, "UTF-8");
  51. }
  52. /**
  53. * 编码
  54. *
  55. * @author WANGWEI
  56. * @param s
  57. * @param enc
  58. * @return
  59. */
  60. public static String encode(String s, String enc) {
  61. try {
  62. return URLEncoder.encode(s, enc).replaceAll("\\+", "%20");
  63. } catch (UnsupportedEncodingException e) {
  64. throw new RuntimeException(e);
  65. }
  66. }
  67. /**
  68. * 解码
  69. *
  70. * @author WANGWEI
  71. * @param s
  72. * @return
  73. */
  74. public static String decode(String s) {
  75. return decode(s, "UTF-8");
  76. }
  77. /**
  78. * 解码
  79. *
  80. * @author WANGWEI
  81. * @param s
  82. * @param enc
  83. * @return
  84. */
  85. public static String decode(String s, String enc) {
  86. try {
  87. return URLDecoder.decode(s, enc);
  88. } catch (UnsupportedEncodingException e) {
  89. throw new RuntimeException(e);
  90. }
  91. }
  92. /**
  93. * url拼接参数
  94. *
  95. * @author WANGWEI
  96. * @param url
  97. * @param params
  98. * @return
  99. */
  100. public static String joinParams(String url, Map<String, String> params) {
  101. Map<String, String> urlParams = getUrlParams(url);
  102. urlParams.putAll(params);
  103. int indexOf = url.lastIndexOf('?');
  104. if (0 < indexOf) {
  105. url = url.substring(0, indexOf);
  106. }
  107. StringBuilder sb = new StringBuilder();
  108. sb.append(url).append("?");
  109. boolean hasParams = false;
  110. for (Entry<String, String> entry : urlParams.entrySet()) {
  111. sb.append(entry.getKey()).append("=").append(encode(entry.getValue())).append("&");
  112. hasParams = true;
  113. }
  114. if (hasParams) {
  115. sb.deleteCharAt(sb.length() - 1);
  116. }
  117. return sb.toString();
  118. }
  119. /**
  120. * 拼接url片段
  121. *
  122. * @author WANGWEI
  123. * @param fragments
  124. * @return
  125. */
  126. public static String joinUrl(String... fragments) {
  127. StringBuilder sb = new StringBuilder();
  128. for (int i = 0; i < fragments.length; i++) {
  129. String cur = fragments[i].trim();
  130. if (cur.endsWith("/")) {
  131. cur = cur.substring(0, cur.length() - 1);
  132. }
  133. if (0 == i) {
  134. sb.append(cur);
  135. } else if (cur.startsWith("/")) {
  136. sb.append(cur);
  137. } else {
  138. sb.append("/").append(cur);
  139. }
  140. }
  141. return sb.toString();
  142. }
  143. }