code: public static String[] splitURIQuery(String uriQuery) {
          assert uriQuery != null;
  
          // Separate '&' parts into separate strings.
          String[] parts = uriQuery.split("&");
          for (int inx = 0; inx < parts.length; inx++) {
              // Replace '+' signs with ' ' and decode this part.
              parts[inx] = Utils.urlDecode(parts[inx].replace('+', ' '));
          }
          return parts;
      }
docs: Split the given query component of a URI into its decoded parts. First, parts
  delimited by non-encoded '{@literal &}'s are separated. Then, each unencoded '+' is replaced
  with a space within each part. Finally, the parts are URL-decoded and stored in the
  result string array. For example, if the URI is:
  <pre>
  "/foo/bar?a=cat{@literal &}b=dog+%24sheep"
  </pre>
  The query component can be extracted using
  {@link #splitURI(String, StringBuilder, StringBuilder, StringBuilder)}, yielding:
  <pre>
  "a=cat{@literal &}b=dog+%24sheep".
  </pre>
  If this string is then passed to this method, it would return the following length-
  two array of Strings:
  <pre>
  result[0] = "a=cat"
  result[1] = "b=dog $sheep"
  </pre>
  
  @param uriQuery  Query component of a URI (cannot be null).
  @return          An array of separated, decoded strings, one per part.