Class InternetDomainName
com or foo.co.uk. Only
 syntactic analysis is performed; no DNS lookups or other network interactions take place. Thus
 there is no guarantee that the domain actually exists on the internet.
 One common use of this class is to determine whether a given string is likely to represent an
 addressable domain on the web -- that is, for a candidate string "xxx", might browsing to
 "http://xxx/" result in a webpage being displayed? In the past, this test was frequently
 done by determining whether the domain ended with a public suffix
 but was not itself a public suffix. However, this test is no longer accurate. There are many
 domains which are both public suffixes and addressable as hosts; "uk.com" is one example.
 Using the subset of public suffixes that are registry suffixes,
 one can get a better result, as only a few registry suffixes are addressable. However, the most
 useful test to determine if a domain is a plausible web host is hasPublicSuffix(). This
 will return true for many domains which (currently) are not hosts, such as "com",
 but given that any public suffix may become a host without warning, it is better to err on the
 side of permissiveness and thus avoid spurious rejection of valid sites. Of course, to actually
 determine addressability of any host, clients of this class will need to perform their own DNS
 lookups.
 
During construction, names are normalized in two ways:
- ASCII uppercase characters are converted to lowercase.
- Unicode dot separators other than the ASCII period ('.') are converted to the ASCII period.
The normalized values will be returned from toString() and parts(), and will
 be reflected in the result of equals(Object).
 
Internationalized domain
 names such as 网络.cn are supported, as are the equivalent IDNA Punycode-encoded
 versions.
- Since:
- 5.0
- Author:
- Catherine Berry
- 
Method SummaryModifier and TypeMethodDescriptionCreates and returns a newInternetDomainNameby prepending the argument and a dot to the current name.booleanEquality testing is based on the text supplied by the caller, after normalization as described in the class documentation.static InternetDomainNameReturns an instance ofInternetDomainNameafter lenient validation.inthashCode()booleanIndicates whether this domain is composed of two or more parts.booleanIndicates whether this domain name ends in a public suffix, including if it is a public suffix itself.booleanIndicates whether this domain name ends in a registry suffix, including if it is a registry suffix itself.booleanIndicates whether this domain name represents a public suffix, as defined by the Mozilla Foundation's Public Suffix List (PSL).booleanIndicates whether this domain name represents a registry suffix, as defined by a subset of the Mozilla Foundation's Public Suffix List (PSL).booleanIndicates whether this domain name is composed of exactly one subdomain component followed by a registry suffix.booleanIndicates whether this domain name is composed of exactly one subdomain component followed by a public suffix.booleanIndicates whether this domain name ends in a public suffix, while not being a public suffix itself.booleanIndicates whether this domain name ends in a registry suffix, while not being a registry suffix itself.static booleanIndicates whether the argument is a syntactically valid domain name using lenient validation.parent()Returns anInternetDomainNamethat is the immediate ancestor of this one; that is, the current domain with the leftmost part removed.parts()Returns the individual components of this domain name, normalized to all lower case.Returns the public suffix portion of the domain name, ornullif no public suffix is present.Returns the registry suffix portion of the domain name, ornullif no registry suffix is present.Returns the portion of this domain name that is one level beneath the registry suffix.Returns the portion of this domain name that is one level beneath the public suffix.toString()Returns the domain name, normalized to all lower case.
- 
Method Details- 
fromReturns an instance ofInternetDomainNameafter lenient validation. Specifically, validation against RFC 3490 ("Internationalizing Domain Names in Applications") is skipped, while validation against RFC 1035 is relaxed in the following ways:- Any part containing non-ASCII characters is considered valid.
- Underscores ('_') are permitted wherever dashes ('-') are permitted.
- Parts other than the final part may start with a digit, as mandated by RFC 1123.
 - Parameters:
- domain- A domain name (not IP address)
- Throws:
- IllegalArgumentException- if- domainis not syntactically valid according to- isValid(java.lang.String)
- Since:
- 10.0 (previously named fromLenient)
 
- 
partsReturns the individual components of this domain name, normalized to all lower case. For example, for the domain namemail.google.com, this method returns the list["mail", "google", "com"].
- 
isPublicSuffixpublic boolean isPublicSuffix()Indicates whether this domain name represents a public suffix, as defined by the Mozilla Foundation's Public Suffix List (PSL). A public suffix is one under which Internet users can directly register names, such ascom,co.ukorpvt.k12.wy.us. Examples of domain names that are not public suffixes includegoogle.com,foo.co.uk, andmyblog.blogspot.com.Public suffixes are a proper superset of registry suffixes. The list of public suffixes additionally contains privately owned domain names under which Internet users can register subdomains. An example of a public suffix that is not a registry suffix is blogspot.com. Note that it is true that all public suffixes have registry suffixes, since domain name registries collectively control all internet domain names.For considerations on whether the public suffix or registry suffix designation is more suitable for your application, see this article. - Returns:
- trueif this domain name appears exactly on the public suffix list
- Since:
- 6.0
 
- 
hasPublicSuffixpublic boolean hasPublicSuffix()Indicates whether this domain name ends in a public suffix, including if it is a public suffix itself. For example, returnstrueforwww.google.com,foo.co.ukandcom, but not forinvalidorgoogle.invalid. This is the recommended method for determining whether a domain is potentially an addressable host.Note that this method is equivalent to hasRegistrySuffix()because all registry suffixes are public suffixes and all public suffixes have registry suffixes.- Since:
- 6.0
 
- 
publicSuffixReturns the public suffix portion of the domain name, ornullif no public suffix is present.- Since:
- 6.0
 
- 
isUnderPublicSuffixpublic boolean isUnderPublicSuffix()Indicates whether this domain name ends in a public suffix, while not being a public suffix itself. For example, returnstrueforwww.google.com,foo.co.ukandmyblog.blogspot.com, but not forcom,co.uk,google.invalid, orblogspot.com.This method can be used to determine whether it will probably be possible to set cookies on the domain, though even that depends on individual browsers' implementations of cookie controls. See RFC 2109 for details. - Since:
- 6.0
 
- 
isTopPrivateDomainpublic boolean isTopPrivateDomain()Indicates whether this domain name is composed of exactly one subdomain component followed by a public suffix. For example, returnstrueforgoogle.comfoo.co.uk, andmyblog.blogspot.com, but not forwww.google.com,co.uk, orblogspot.com.This method can be used to determine whether a domain is probably the highest level for which cookies may be set, though even that depends on individual browsers' implementations of cookie controls. See RFC 2109 for details. - Since:
- 6.0
 
- 
topPrivateDomainReturns the portion of this domain name that is one level beneath the public suffix. For example, forx.adwords.google.co.ukit returnsgoogle.co.uk, sinceco.ukis a public suffix. Similarly, formyblog.blogspot.comit returns the same domain,myblog.blogspot.com, sinceblogspot.comis a public suffix.If isTopPrivateDomain()is true, the current domain name instance is returned.This method can be used to determine the probable highest level parent domain for which cookies may be set, though even that depends on individual browsers' implementations of cookie controls. - Throws:
- IllegalStateException- if this domain does not end with a public suffix
- Since:
- 6.0
 
- 
isRegistrySuffixpublic boolean isRegistrySuffix()Indicates whether this domain name represents a registry suffix, as defined by a subset of the Mozilla Foundation's Public Suffix List (PSL). A registry suffix is one under which Internet users can directly register names via a domain name registrar, and have such registrations lawfully protected by internet-governing bodies such as ICANN. Examples of registry suffixes includecom,co.uk, andpvt.k12.wy.us. Examples of domain names that are not registry suffixes includegoogle.comandfoo.co.uk.Registry suffixes are a proper subset of public suffixes. The list of public suffixes additionally contains privately owned domain names under which Internet users can register subdomains. An example of a public suffix that is not a registry suffix is blogspot.com. Note that it is true that all public suffixes have registry suffixes, since domain name registries collectively control all internet domain names.For considerations on whether the public suffix or registry suffix designation is more suitable for your application, see this article. - Returns:
- trueif this domain name appears exactly on the public suffix list as part of the registry suffix section (labelled "ICANN").
- Since:
- 23.3
 
- 
hasRegistrySuffixpublic boolean hasRegistrySuffix()Indicates whether this domain name ends in a registry suffix, including if it is a registry suffix itself. For example, returnstrueforwww.google.com,foo.co.ukandcom, but not forinvalidorgoogle.invalid.Note that this method is equivalent to hasPublicSuffix()because all registry suffixes are public suffixes and all public suffixes have registry suffixes.- Since:
- 23.3
 
- 
registrySuffixReturns the registry suffix portion of the domain name, ornullif no registry suffix is present.- Since:
- 23.3
 
- 
isUnderRegistrySuffixpublic boolean isUnderRegistrySuffix()Indicates whether this domain name ends in a registry suffix, while not being a registry suffix itself. For example, returnstrueforwww.google.com,foo.co.ukandblogspot.com, but not forcom,co.uk, orgoogle.invalid.- Since:
- 23.3
 
- 
isTopDomainUnderRegistrySuffixpublic boolean isTopDomainUnderRegistrySuffix()Indicates whether this domain name is composed of exactly one subdomain component followed by a registry suffix. For example, returnstrueforgoogle.com,foo.co.uk, andblogspot.com, but not forwww.google.com,co.uk, ormyblog.blogspot.com.Warning: This method should not be used to determine the probable highest level parent domain for which cookies may be set. Use topPrivateDomain()for that purpose.- Since:
- 23.3
 
- 
topDomainUnderRegistrySuffixReturns the portion of this domain name that is one level beneath the registry suffix. For example, forx.adwords.google.co.ukit returnsgoogle.co.uk, sinceco.ukis a registry suffix. Similarly, formyblog.blogspot.comit returnsblogspot.com, sincecomis a registry suffix.If isTopDomainUnderRegistrySuffix()is true, the current domain name instance is returned.Warning: This method should not be used to determine whether a domain is probably the highest level for which cookies may be set. Use isTopPrivateDomain()for that purpose.- Throws:
- IllegalStateException- if this domain does not end with a registry suffix
- Since:
- 23.3
 
- 
hasParentpublic boolean hasParent()Indicates whether this domain is composed of two or more parts.
- 
parentReturns anInternetDomainNamethat is the immediate ancestor of this one; that is, the current domain with the leftmost part removed. For example, the parent ofwww.google.comisgoogle.com.- Throws:
- IllegalStateException- if the domain has no parent, as determined by- hasParent()
 
- 
childCreates and returns a newInternetDomainNameby prepending the argument and a dot to the current name. For example,InternetDomainName.from("foo.com").child("www.bar")returns a newInternetDomainNamewith the valuewww.bar.foo.com. Only lenient validation is performed, as describedhere.- Throws:
- NullPointerException- if leftParts is null
- IllegalArgumentException- if the resulting name is not valid
 
- 
isValidIndicates whether the argument is a syntactically valid domain name using lenient validation. Specifically, validation against RFC 3490 ("Internationalizing Domain Names in Applications") is skipped.The following two code snippets are equivalent: domainName = InternetDomainName.isValid(name) ? InternetDomainName.from(name) : DEFAULT_DOMAIN;try { domainName = InternetDomainName.from(name); } catch (IllegalArgumentException e) { domainName = DEFAULT_DOMAIN; }- Since:
- 8.0 (previously named isValidLenient)
 
- 
toString
- 
equalsEquality testing is based on the text supplied by the caller, after normalization as described in the class documentation. For example, a non-ASCII Unicode domain name and the Punycode version of the same domain name would not be considered equal.
- 
hashCode
 
-