Java query string builder and parser

Java
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.LinkedHashMap;
import java.util.Map;
public final class QueryString {
    public static String build(Map<String, String> p) {
        StringBuilder sb = new StringBuilder();
        p.forEach((k, v) -> sb.append(sb.length() == 0 ? "" : "&").append(enc(k)).append('=').append(enc(v)));
        return sb.toString();
    }
    public static Map<String, String> parse(String q) {
        Map<String, String> out = new LinkedHashMap<>();
        for (String pair : (q == null || q.isBlank() ? new String[0] : q.replaceFirst("^\\?", "").split("&"))) {
            int eq = pair.indexOf('=');
            out.put(dec(eq < 0 ? pair : pair.substring(0, eq)), eq < 0 ? "" : dec(pair.substring(eq + 1)));
        }
        return out;
    }
    private static String enc(String s) { return URLEncoder.encode(s, StandardCharsets.UTF_8); }
    private static String dec(String s) { return URLDecoder.decode(s, StandardCharsets.UTF_8); }
}