如果我有两个URI,是否有更简单的方法来比较基URI而不必执行以下操作?
URI firstURI = new URI("https://localhost:8000");
URI secondURI = new URI("https://localhost:8000/testing");
if (!firstURI.getHost().equals(secondURI.getHost()) ||
!firstURI.getScheme().equals(secondURI.getScheme()) ||
firstURI.getPort() != secondURI.getPort())
{
//error
}
答案 0 :(得分:0)
您可以使用URI.equals()
方法,但它根本不适合您的要求,因为它依赖于非常不同的规则。
以下是摘录:
对于两个被视为相等的URI,要求两者都是 不透明或两者都是层次结构*。他们的计划必须都是 未定义或不相同而不考虑案例。他们的碎片 必须要么两者都未定义,要么相等。
所以你没有真正的选择:创建一个实用工具方法并使用它,如:
public boolean isURIMatch(URI firstURI, URI secondURI){
if (!firstURI.getHost().equals(secondURI.getHost()) ||
!firstURI.getScheme().equals(secondURI.getScheme()) ||
firstURI.getPort() != secondURI.getPort()) {
return false;
}
return true;
}
答案 1 :(得分:0)
您可以通过比较getAuthority()的值来略微缩短它,它会返回方案和路径之间的所有内容:
if (!firstURI.getAuthority().equals(secondURI.getAuthority()) ||
!firstURI.getScheme().equals(secondURI.getScheme()))
请注意,权限还包括用户信息(用户名和密码),但很少有URL使用它,因此除非您期望URI中包含登录信息,否则上述比较应该是安全的。