getDomainFromUrl.java
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class DomainUrlUtils {
private static String[] TLD = {"com", "net"}; // top-level domain
private static String[] SLD = {"co\\.kr"}; // second-level domain
/**
* 도메인 가져오기
* 주의: 새로운 top-level, second-level이 있다면 TLD, SLD에 추가할 것
*
* @param url
* @return domain
*/
public static String getDomainName(String url) {
Pattern pattern = Pattern.compile("(?<=)[^(\\.|\\/)]\\w+\\.(" + joinTldAndSld("|") + ")$");
Matcher match = pattern.matcher(url);
return match.find() ? match.group() : null;
}
/**
* TLD, SLD를 delimiter로 이어주기
*
* @param delimiter
* @return
*/
private static String joinTldAndSld(String delimiter) {
String t = String.join(delimiter, TLD);
String s = String.join(delimiter, SLD);
return new StringBuilder(t).append(s.isEmpty() ? "" : "|" + s).toString();
}
}
Test Case
public class DomainUrlUtilsTest {
@Test
public void getDomainName() throws Exception {
// given
String[][] domainUrls = {
{
"test.com",
"sub1.test.com",
"sub1.sub2.test.com",
"https://sub1.test.com",
"http://sub1.sub2.test.com"
},
{
"https://domain.com",
"https://sub.domain.com"
},
{
"http://domain.co.kr",
"http://sub.domain.co.kr",
"http://local.sub.domain.co.kr",
"http://local-test.sub.domain.co.kr",
"sub.domain.co.kr",
"domain.co.kr",
"test.sub.domain.co.kr"
}
};
String[] expectedUrls = {
"test.com",
"domain.com",
"domain.co.kr"
};
// when
// then
for (int domainIndex = 0; domainIndex < domainUrls.length; domainIndex++) {
for (String url : domainUrls[domainIndex]) {
String convertedUrl = DomainUrlUtils.getDomainName(url);
if (expectedUrls[domainIndex].equals(convertedUrl)) {
System.out.println(url + " -> " + convertedUrl);
} else {
Assert.fail("origin Url: " + url + " / converted Url: " + convertedUrl);
}
}
}
}
}
Results
test.com -> test.com sub1.test.com -> test.com sub1.sub2.test.com -> test.com https://sub1.test.com -> test.com http://sub1.sub2.test.com -> test.com https://domain.com -> domain.com https://sub.domain.com -> domain.com http://domain.co.kr -> domain.co.kr http://sub.domain.co.kr -> domain.co.kr http://local.sub.domain.co.kr -> domain.co.kr http://local-test.sub.domain.co.kr -> domain.co.kr sub.domain.co.kr -> domain.co.kr