这个问题已经被问这里:我可以使用什么java库来比较两个URL是否相等?
,但我对这个答案完全不满意。我需要一种方法来比较两个URL是否相等,最好是我不会用手写。这个库需要明白,这些URL相等
http://stackoverflow.com
https://stackoverflow.com/
https://stackoverflow.com/questions/ask
https://stackoverflow.com/questions/ask/
http://stackoverflow.com?paramName=
http://stackoverflow.com?paramName
http://stackoverflow.com?paramName1=value1¶mName2=value2
http://stackoverflow.com?paramName2=value2¶mName1=value1
http://stackoverflow.com?param name 1=value 1
http://stackoverflow.com?param%20name%201=value%201
这些URL是不相等的:
https://stackoverflow.com/questions/ask
https://stackoverflow.com/questionz/ask
http://stackoverflow.com?paramName1=value1¶mName2=value2
http://stackoverflow.com?paramName1=value1¶mName2=value3
和其他类似这样复杂的事情。我在哪里可以找到这样的图书馆?
顺便说一句,这里就是一个单元测试:
import org.junit.Test;
import java.net.URI;
import java.net.URISyntaxException;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotSame;
public class UriTest {
@Test
public void equality() throws URISyntaxException {
assertUrlsEqual("http://stackoverflow.com", "https://stackoverflow.com/");
assertUrlsEqual("https://stackoverflow.com/questions/ask", "https://stackoverflow.com/questions/ask/");
assertUrlsEqual("http://stackoverflow.com?paramName=", "http://stackoverflow.com?paramName");
assertUrlsEqual("http://stackoverflow.com?paramName1=value1¶mName2=value2", "http://stackoverflow.com?paramName2=value2¶mName1=value1");
assertUrlsEqual("http://stackoverflow.com?param name 1=value 1", "http://stackoverflow.com?param%20name%201=value%201");
}
@Test
public void notEqual() throws URISyntaxException {
assertUrlsNotEqual("https://stackoverflow.com/questions/ask", "https://stackoverflow.com/questionz/ask");
assertUrlsNotEqual("http://stackoverflow.com?paramName1=value1¶mName2=value2", "http://stackoverflow.com?paramName1=value1¶mName2=value3");
}
private void assertUrlsNotEqual(String u1, String u2) throws URISyntaxException {
//...?
}
private void assertUrlsEqual(String u1, String u2) throws URISyntaxException {
//...?
}
}
看来你只是想看看基地址是否相同,你为什么不尝试在你的URL上调用'getHost()'并且看看它是否等于另一个'URL'? –
'stackoverflow.com'和'stackoverflow.com /'真*不符合规范。他们只是碰巧等同于你的目的。这就是为什么你的要求不是公共库的东西。 –
@JoshM看我的编辑 –