gpt4 book ai didi

java - 如何在没有参数顺序的情况下测试 URI 是否相等?

转载 作者:行者123 更新时间:2023-12-03 23:14:19 26 4
gpt4 key购买 nike

考虑一段代码:

URI one = URI.create("http://localhost:8081/contextRoot/main.html?one=1&second=2");
URI second = URI.create("http://localhost:8081/contextRoot/main.html?second=2&one=1");
System.out.println(one.equals(second));

它打印false。有没有一种方法可以在没有 URI 参数顺序的情况下测试 URI?

最佳答案

不幸的是,URI/URL 对象的 equals 方法并不总是如此,这正是您所等待的。这就是为什么要比较具有不同参数顺序的 2 个 URI(如果您认为顺序对您不重要),您应该使用一些实用程序逻辑。例如如下:

public static void main(String... args) {
URI one = URI.create("http://localhost:8081/contextRoot/main.html?one=1&second=2");
URI second = URI.create("http://localhost:8081/contextRoot/main.html?second=2&one=1");
System.out.println(one.equals(second));
System.out.println(areEquals(one, second));
}

private static boolean areEquals(URI url1, URI url2) {
//compare the commons part of URI
if (!url1.getScheme().equals(url1.getScheme()) ||
!url1.getAuthority().equals(url2.getAuthority()) ||
url1.getPort() != url2.getPort() ||
!url1.getHost().equals(url2.getHost())) {
return false;
}

//extract query parameters
String params1 = url1.getQuery();
String params2 = url2.getQuery();

if ((params1 != null && params2 != null) && (params1.length() == params2.length())) {
//get sorted list of parameters
List<String> list1 = extractParameters(params1);
List<String> list2 = extractParameters(params2);

//since list are sorted and contain String objects,
//we can compare the lists objects
return list1.equals(list2);
} else {
return false;
}
}

//return sorted list of parameters with the values
private static List<String> extractParameters(String paramsString) {
List<String> parameters = new ArrayList<>();

String[] paramAr = paramsString.split("&");
for (String parameter : paramAr) {
parameters.add(parameter);
}
Collections.sort(parameters);
return parameters;
}

关于java - 如何在没有参数顺序的情况下测试 URI 是否相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33338819/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com