diff --git a/core-java-modules/core-java-networking-3/pom.xml b/core-java-modules/core-java-networking-3/pom.xml
index 297d665544..63385c2334 100644
--- a/core-java-modules/core-java-networking-3/pom.xml
+++ b/core-java-modules/core-java-networking-3/pom.xml
@@ -52,6 +52,12 @@
java-ipv6
${googlecode.ipv6.version}
+
+
+ com.google.guava
+ guava
+ ${guava.version}
+
@@ -84,6 +90,7 @@
1.32
0.17
1.6.2
+ 31.0-jre
\ No newline at end of file
diff --git a/core-java-modules/core-java-networking-3/src/main/java/com/baeldung/domain_name/DomainNameClient.java b/core-java-modules/core-java-networking-3/src/main/java/com/baeldung/domain_name/DomainNameClient.java
new file mode 100644
index 0000000000..1b2cb636fe
--- /dev/null
+++ b/core-java-modules/core-java-networking-3/src/main/java/com/baeldung/domain_name/DomainNameClient.java
@@ -0,0 +1,34 @@
+package com.baeldung.domain_name;
+
+import com.google.common.net.InternetDomainName;
+
+import java.net.URI;
+import java.net.URISyntaxException;
+
+public class DomainNameClient {
+
+ public String getHost(String url) throws URISyntaxException {
+ URI uri = new URI(url);
+ return uri.getHost();
+ }
+
+ public String getTopPrivateDomain(String url) {
+ InternetDomainName internetDomainName = InternetDomainName.from(url)
+ .topPrivateDomain();
+ return internetDomainName.toString();
+ }
+
+ public String getName(String url) {
+ InternetDomainName internetDomainName = InternetDomainName.from(url)
+ .topPrivateDomain();
+ String publicSuffix = internetDomainName.publicSuffix()
+ .toString();
+ String domainName = internetDomainName.toString();
+ return domainName.substring(0, domainName.lastIndexOf("." + publicSuffix));
+ }
+
+ public String getDomainName(String url) {
+ String regex = "http(s)?://|www\\.|/.*";
+ return url.replaceAll(regex, "");
+ }
+}
diff --git a/core-java-modules/core-java-networking-3/src/test/java/com/baeldung/domain_name/DomainNameClientUnitTest.java b/core-java-modules/core-java-networking-3/src/test/java/com/baeldung/domain_name/DomainNameClientUnitTest.java
new file mode 100644
index 0000000000..d69e7c0333
--- /dev/null
+++ b/core-java-modules/core-java-networking-3/src/test/java/com/baeldung/domain_name/DomainNameClientUnitTest.java
@@ -0,0 +1,51 @@
+package com.baeldung.domain_name;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+class DomainNameClientUnitTest {
+
+ DomainNameClient domainNameClient = new DomainNameClient();
+
+ @Test
+ void givenUrl_whenGetHost_thenReturnSubdomainAndDomainName() {
+ Assertions.assertAll(() -> {
+ assertEquals("www.baeldung.com", domainNameClient.getHost("https://www.baeldung.com/domain"));
+ assertEquals("www.google.co.uk", domainNameClient.getHost("https://www.google.co.uk/domain"));
+ assertEquals("jira.baeldung.com", domainNameClient.getHost("https://jira.baeldung.com/secure"));
+ });
+ }
+
+ @Test
+ void givenUrl_whenGetTopPrivateDomain_thenReturnDomainName() {
+ assertEquals("baeldung.com", domainNameClient.getTopPrivateDomain("www.baeldung.com"));
+ }
+
+ @Test
+ void givenUrlWithPublicSuffix_whenGetTopPrivateDomain_thenReturnDomainName() {
+ assertEquals("google.co.uk", domainNameClient.getTopPrivateDomain("www.google.co.uk"));
+ assertEquals("baeldung.blogspot.com", domainNameClient.getTopPrivateDomain("www.baeldung.blogspot.com"));
+ }
+
+ @Test
+ void givenUrlWithPublicSuffix_whenGetName_thenReturnSecondLevelDomain() {
+ assertEquals("baeldung", domainNameClient.getName("jira.baeldung.com"));
+ }
+
+ @Test
+ void givenUrlWithPublicSuffix_whenGetName_thenReturnThirdLevelDomain() {
+ assertEquals("baeldung", domainNameClient.getName("www.baeldung.co.uk"));
+ assertEquals("google", domainNameClient.getName("www.google.co.uk"));
+ }
+
+ @Test
+ void givenUrl_whenGetDomainNameRegex_thenReturnDomainName() {
+ assertEquals("google.com", domainNameClient.getDomainName("www.google.com"));
+ assertEquals("google.co.uk", domainNameClient.getDomainName("www.google.co.uk"));
+ assertEquals("jira.baeldung.com", domainNameClient.getDomainName("jira.baeldung.com"));
+ assertEquals("baeldung.com", domainNameClient.getDomainName("www.baeldung.com/test"));
+ }
+
+}