From 3bd0797966a84fc119533fe39922de7c157f15d8 Mon Sep 17 00:00:00 2001 From: Aleksey Kalenchukov Date: Sun, 27 Mar 2022 14:46:04 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=B8=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D0=B0=D0=BD=D1=8B=20=D0=BF=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D0=BC=D0=B5=D0=BD=D0=BD=D1=8B=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dev/kalenchukov/uriquery/UriQuery.java | 48 +++++++++++-------- 1 file changed, 29 insertions(+), 19 deletions(-) diff --git a/src/main/java/dev/kalenchukov/uriquery/UriQuery.java b/src/main/java/dev/kalenchukov/uriquery/UriQuery.java index e593a2d..8eaeff8 100644 --- a/src/main/java/dev/kalenchukov/uriquery/UriQuery.java +++ b/src/main/java/dev/kalenchukov/uriquery/UriQuery.java @@ -13,7 +13,6 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; /** * Класс содержит статические методы для сборки / разборки параметров URI. @@ -25,19 +24,21 @@ private UriQuery() {} /** * Разбирает параметры URI. * - * @param uriQueryEncode Закодированные параметры URI. + * @param query Закодированные параметры URI. * @return Коллекцию параметров и их значений. */ @NotNull - public static Map<@NotNull String, @NotNull List<@NotNull String>> parse(@Nullable final String uriQueryEncode) + public static Map<@NotNull String, @NotNull List<@NotNull String>> parse(@NotNull final String query) { - Map> queryParams = new LinkedHashMap<>(); + Objects.requireNonNull(query); - if (uriQueryEncode == null || uriQueryEncode.length() < 3) { - return queryParams; + Map> params = new LinkedHashMap<>(); + + if (query.length() < 3) { + return params; } - for (String groupParam : uriQueryEncode.split("&")) + for (String groupParam : query.split("&")) { Pattern pattern = Pattern.compile("(?[a-z0-9_\\-.+,|:]+(\\[\\])?)=(?.*)", Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher(groupParam); @@ -53,17 +54,17 @@ private UriQuery() {} { paramGroup = paramGroup.replace("[]", ""); - if (queryParams.containsKey(paramGroup)) { - queryParamValues = queryParams.get(paramGroup); + if (params.containsKey(paramGroup)) { + queryParamValues = params.get(paramGroup); } } queryParamValues.add(valueGroup); - queryParams.put(paramGroup, queryParamValues); + params.put(paramGroup, queryParamValues); } } - return queryParams; + return params; } /** @@ -77,35 +78,44 @@ public static String compose(@NotNull final Map<@NotNull String, @NotNull List<@ { Objects.requireNonNull(params); - StringBuilder uriQuery = new StringBuilder(); + StringBuilder query = new StringBuilder(); + + if (params.size() == 0) { + return query.toString(); + } boolean needSeparator = false; for (Map.Entry> groupParam : params.entrySet()) { + Objects.requireNonNull(groupParam.getKey()); + Objects.requireNonNull(groupParam.getValue()); + if (needSeparator) { - uriQuery.append("&"); + query.append("&"); } for (int elm = 0; elm < groupParam.getValue().size(); elm++) { + Objects.requireNonNull(groupParam.getValue().get(elm)); + if (elm > 0) { - uriQuery.append("&"); + query.append("&"); } - uriQuery.append(URLEncoder.encode(groupParam.getKey(), StandardCharsets.UTF_8)); + query.append(URLEncoder.encode(groupParam.getKey(), StandardCharsets.UTF_8)); if (groupParam.getValue().size() > 1) { - uriQuery.append("[]"); + query.append("[]"); } - uriQuery.append("="); - uriQuery.append(URLEncoder.encode(groupParam.getValue().get(elm), StandardCharsets.UTF_8)); + query.append("="); + query.append(URLEncoder.encode(groupParam.getValue().get(elm), StandardCharsets.UTF_8)); } needSeparator = true; } - return uriQuery.toString(); + return query.toString(); } }