LoginSignup
4
1

More than 3 years have passed since last update.

【Java】URL文字列からドメインを取得する

Last updated at Posted at 2021-05-10

TL;DR

URI.getRawAuthorityが良さげに見えました。

やり方

やり方はいくつか考えられますが、ここではjava.net.URI.getRawAuthorityを使ったやり方を紹介します。

サンプルコード
import java.net.URI;
import java.util.stream.Stream;

Stream.of(
        new URI("url"),
        new URI("url.com"),
        new URI("./url/foo"),
        new URI("http://url"),
        new URI("http://url.com/"),
        new URI("http://aa.bb.cc.com/foo/bar"),
        new URI("https://あ.い")
).forEach(it -> System.out.println(it.getRawAuthority()));
実行結果
null
null
null
url
url.com
aa.bb.cc.com
あ.い

解説

サンプルコードからは以下のことが確認できます。

  • 入力フォーマットは、http(s)://を頭につければ後ろがFQDN形式になっていなくてもOK
    • 相対パスを渡した際はnullになる
  • 日本語(多バイト文字)が入っていても動作する
  • ドメイン末尾の/やパスは削除される

変なものを入れるとnullを返されてしまったり、URISyntaxExceptionを投げられることが有る点には注意が必要です。
また、getAuthorityではなくgetRawAuthorityを用いている理由は、エスケープされた入力が意図せずデコードされるようなことを回避するためです。

URIからドメインを取得する方法は他にも有りますが、自分の要件ではこのやり方で十分動作したため、ここでは解説しません。

より詳細な解説は下記のJavadocを参照ください。

また、URLクラスはあまり良くないそうなので、必ずURIクラスを用いることをお勧めします。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1