Wie vergleicht man zwei URLs in Java?

8

Hier ist ein einfaches Problem - gibt es bei zwei URLs eine eingebaute Methode oder eine Apache-Bibliothek, die entscheidet, ob sie (logisch) gleich sind?

Zum Beispiel sind diese beiden URLs gleich:

%Vor%     
r0u1i 23.03.2011, 08:18
quelle

4 Antworten

10

Während URI.equals() (sowie die problematische URL.equals() ) gibt nicht true für diese spezifischen Beispiele zurück. Ich denke, das ist der einzige Fall, bei dem Äquivalenz angenommen werden kann (weil es im HTTP-Protokoll keinen leeren Pfad gibt) .

Die URIs http://stackoverflow.com/foo und http://stackoverflow.com/foo/ können nicht als gleichwertig angenommen werden.

Vielleicht können Sie URI.equals() in einer Hilfsmethode verwenden, die diesen speziellen Fall explizit behandelt.

    
Joachim Sauer 23.03.2011, 08:27
quelle
2

URL :: entspricht der Referenz

%Vor%

Hinweis von docs -

  

Zwei URL-Objekte sind gleich, wenn sie dasselbe Protokoll haben, gleichwertige Referenzhosts, dieselbe Portnummer auf dem Host und dieselbe Datei und dasselbe Fragment der Datei haben.

     

Zwei Hosts werden als gleichwertig betrachtet, wenn beide Hostnamen in die gleichen IP-Adressen aufgelöst werden können; Andernfalls, wenn einer der Hostnamen nicht aufgelöst werden kann, müssen die Hostnamen ohne Berücksichtigung der Groß- / Kleinschreibung gleich sein. oder beide Hostnamen gleich null.

     

Da der Vergleich der Hosts eine Namensauflösung erfordert, ist diese Operation eine Blockierungsoperation.

     

Hinweis: Es ist bekannt, dass das definierte Verhalten für equals mit dem virtuellen Hosting in HTTP inkonsistent ist.

Sie sollten stattdessen URI :: entspricht der Referenz , wie @Joachim vorgeschlagen hat.

    
Mahesh 23.03.2011 08:22
quelle
1

Das Folgende könnte für Sie funktionieren - es bestätigt, dass 2 URLs gleich sind, erlaubt die Parameter in verschiedenen Reihenfolgen zu liefern und erlaubt eine Vielzahl von Optionen zu konfigurieren, nämlich:

  • Ist der Host für Groß- und Kleinschreibung zuständig?
  • Ist der Pfad Groß- / Kleinschreibung?
  • Sind Query-String-Parameter case sensitive
  • Sind die Werte von Abfragezeichenfolgen case sensitive
  • ?
  • Ist das Schema sensibel?

Sie können es wie folgt testen:

%Vor%

UrlComparer.java

%Vor%     
Brad Parks 18.05.2017 18:34
quelle
-1

sameFile

  

public boolean sameFile (URL other) Vergleicht zwei URLs,

ausschließlich der Fragmentkomponente. Gibt true zurück, wenn diese URL und das andere Argument gleich sind, ohne die Fragmentkomponente zu berücksichtigen.

Parameter: Sonstiges - die URL, mit der verglichen werden soll. Kehrt zurück: Wahr, wenn sie auf dasselbe entfernte Objekt verweisen; sonst falsch.

gehen Sie auch durch diesen Link

  

Ссылка

As iam kann keinen Kommentar hinzufügen, Browser verursacht JavaScript-Fehler. Also, ich habe hier meinen Kommentar hinzugefügt. Bedauern für Unannehmlichkeiten.

// das, was ich vorgeschlagen habe

%Vor%

Joachim Sauer also einmal nachschauen, bitte ändern Sie Ihren Ruf.

    
developer 23.03.2011 08:26
quelle

Tags und Links