2012-06-26 3 views
6

Ich habe eine Reihe von Strings (URLs) in verschiedenen Formen wie:Was ist der Unterschied zwischen getHost- und getAuthority-Methoden in der URL-Klasse in Java?

  1. http://domain name.anything/anypath
  2. https://dmain name.anything/anypath
  3. http://www.domain name.anything/anypath
  4. https://www.dmain name.anything/anypath

Diese Strings in CSV-Datei gespeichert. Ich muss jede URL analysieren, um nur den Domain-Namen zu erhalten, domain name.anything. h. der Teil nach dem ersten . und vor dem ersten /.

Ich habe die Zeichenfolgen mit der Methode split getrennt, dann jede Zeichenfolge in eine URL konvertiert und dann die Funktion toAuthority verwendet, um nur den Domänennamen abzurufen. Das Problem ist, dass toAuthority und toHost die gleiche Arbeit für mich erledigen, sie schließen die www. ein, die ich nicht will. In der tutorial von Oracle scheint es jedoch, dass den Domänennamen ohne www. zurückgeben soll.

Wie kann ich den Domain-Namen-Teil nur ohne die www. der URL ??

+0

'getHost' bekommt die Hostnamen und' getAuthority' erhält die Behörde –

Antwort

13

Was ist der Unterschied zwischen den Methoden getHost und getAuthority in der URL-Klasse?

Um das wirklich zu verstehen, sollten Sie URI specification - RFC 2396 lesen.

Die kurze Antwort ist, dass die Autorität Komponente besteht aus der Host-Komponente zusammen mit einer optionalen Port-Nummer, Benutzername und Passwort ... abhängig von der URL-Schema, das verwendet wird.


Wie kann ich den Domain-Namen Teil extrahieren nur ohne "www." der URL ??

Sie getHost() nennen, zu testen, ob es mit der Zeichenfolge beginnt "www." und wenn es Sie tut es entfernen.

Aber bevor Sie anfangen, solche Dinge zu tun, müssen Sie verstehen, dass das Entfernen der "www." kann Ihnen eine URL geben, die nicht funktioniert oder die zu einem Dokument oder Dienst führt, der sich von dem unterscheidet, mit dem die ursprüngliche URL aufgelöst wird. Es ist keine gute Idee, URLs kostenlos zu löschen, es sei denn, Sie haben detaillierte Kenntnisse darüber, wie diese Websites organisiert sind.

Die Konvention, dass "foo.com" und "www.foo.com" sind der gleiche Ort ist nur eine Konvention, und eine Menge von Websites implementieren es nicht. Entfernen von "www." wäre eine schlechte Idee, weil es auslösbare URLs in URLs umwandeln kann, die nicht aufgelöst werden.

+0

die RFC-Spezifikation und die foo.com/ Hinzufügen“ www.foo.com "Klarstellung war eine nette Geste. –

1

Es klingt wie Sie suchen, um die effektive Second-Level-Domain zu extrahieren. Dies ist für eine kleine Anzahl von öffentlichen Suffixen wie .com, .net, .org leicht zu extrahieren, indem zuerst der Hostname abgerufen wird, wie Stephen beschreibt, und die Teilzeichenfolge beginnend mit der zweiten Periode vom Ende extrahiert wird. Viele öffentliche Suffixe wie co.uk werden diesen einfachen Algorithmus jedoch brechen.Eine vollständige Liste der öffentlichen Suffixe finden Sie hier: http://publicsuffix.org/ Sie können dann die öffentlichen Suffixe in einer Nachschlagetabelle verwenden, um die effektive Second-Level-Domain zu erhalten.

1

Sie google Guave können die Domain-Namen aus dem Hostnamen erhalten:

InternetDomainName.from(hostname).topPrivateDomain().toString() 
Verwandte Themen