是否有一种简单的方法来比较方案:主机:URI的端口部分,看它们是否相等?

时间:2018-04-03 14:58:30

标签: java uri

如果我有两个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
}

2 个答案:

答案 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中包含登录信息,否则上述比较应该是安全的。