URI(Uniform Resource Identifiers)를 처리할 때 이름-값 쌍 컬렉션에 문자열을 쿼리합니다. Java에는 C#/.NET HttpUtility.ParseQueryString 메서드에 해당하는 내장 메서드가 없습니다. 그러나 사용자 정의 코드를 사용하여 이를 달성하는 다양한 방법이 있습니다.
URI 문자열을 Map으로 구문 분석하는 한 가지 방법은 사용자 정의 방법을 생성하는 것입니다. 단순화된 버전은 다음과 같습니다.
public static Map<String, String> splitQuery(URL url) throws UnsupportedEncodingException { Map<String, String> queryPairs = new LinkedHashMap<>(); String query = url.getQuery(); String[] pairs = query.split("&"); for (String pair : pairs) { int idx = pair.indexOf("="); queryPairs.put(URLDecoder.decode(pair.substring(0, idx), "UTF-8"), URLDecoder.decode(pair.substring(idx + 1), "UTF-8")); } return queryPairs; }
위 방법은 동일한 키를 사용하는 여러 매개변수와 값이 없는 매개변수를 처리하도록 업데이트되었습니다. 향상된 버전은 다음과 같습니다.
public static Map<String, List<String>> splitQuery(URL url) throws UnsupportedEncodingException { final Map<String, List<String>> queryPairs = new LinkedHashMap<>(); final String[] pairs = url.getQuery().split("&"); for (String pair : pairs) { final int idx = pair.indexOf("="); final String key = idx > 0 ? URLDecoder.decode(pair.substring(0, idx), "UTF-8") : pair; if (!queryPairs.containsKey(key)) { queryPairs.put(key, new LinkedList<>()); } final String value = idx > 0 && pair.length() > idx + 1 ? URLDecoder.decode(pair.substring(idx + 1), "UTF-8") : null; queryPairs.get(key).add(value); } return queryPairs; }
다음은 Java 8 버전의 메소드입니다.
public Map<String, List<String>> splitQuery(URL url) { if (Strings.isNullOrEmpty(url.getQuery())) { return Collections.emptyMap(); } return Arrays.stream(url.getQuery().split("&")) .map(this::splitQueryParameter) .collect(Collectors.groupingBy(SimpleImmutableEntry::getKey, LinkedHashMap::new, mapping(Map.Entry::getValue, toList()))); } public SimpleImmutableEntry<String, String> splitQueryParameter(String it) { final int idx = it.indexOf("="); final String key = idx > 0 ? it.substring(0, idx) : it; final String value = idx > 0 && it.length() > idx + 1 ? it.substring(idx + 1) : null; return new SimpleImmutableEntry<>(URLDecoder.decode(key, StandardCharsets.UTF_8), URLDecoder.decode(value, StandardCharsets.UTF_8)); }
To SplitQuery 메소드를 사용하여 간단히 URL 객체를 전달하면 구문 분석된 쿼리 문자열이 포함된 맵이 반환됩니다. 매개변수:
URL url = new URL("https://google.com.ua/oauth/authorize?client_id=SS&response_type=code&scope=N_FULL&access_type=offline&redirect_uri=http://localhost/Callback"); Map<String, String> queryParameters = splitQuery(url);
맵에서 값에 액세스하는 것은 간단합니다.
String clientId = queryParameters.get("client_id"); // SS
위 내용은 Java에서 URI 쿼리 문자열을 이름-값 컬렉션으로 구문 분석하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!