LoginSignup
5
5

More than 5 years have passed since last update.

JavaでURLを比較する

Posted at

http://hostname:8080/hoge/?param1=value1&param2=value2

http://hostname:8080/hoge/?param2=value2&param1=value1
はサーバ側とすれば同じURLですが文字列で比較すると異なります。
URLを比較する便利なものを探しましたが見つからず、自作しました。
いけてないロジックなのでもっといい方法があれば教えてください。


import java.net.URI;
import java.net.URL;
import java.util.List;

import org.apache.http.NameValuePair;
import org.apache.http.client.utils.URLEncodedUtils;
import org.junit.Assert;

public class AssertExtensions {

    public static void assertUrlEquals(String expected, String actual) {
        try {
            URL url1 = new URL(expected);
            URL url2 = new URL(actual);
            URI uri1 = new URI(expected);
            URI uri2 = new URI(actual);

            List<NameValuePair> paramList1 = URLEncodedUtils.parse(uri1, "UTF-8");
            List<NameValuePair> paramList2 = URLEncodedUtils.parse(uri2, "UTF-8");

            if (url1.getHost().equals(url2.getHost())) {
                if (url1.getPath().equals(url2.getPath())) {
                    if (url1.getPort() == url2.getPort()) {
                        if (url1.getProtocol().equals(url2.getProtocol())) {
                            if (paramList1.size() == paramList2.size()) {
                                int counter = 0;
                                for (NameValuePair a : paramList1) {
                                    for (NameValuePair b : paramList2) {
                                        if (a.equals(b)) {
                                            counter++;
                                            break;
                                        }
                                    }
                                }
                                if (counter == paramList1.size()) {
                                    return;
                                }
                           }
                        }
                    }
                }
            }

        } catch (Exception ex) {

        }
        Assert.fail("expected: " + expected + " but was: " + actual);
    }
}



5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5