Java : URI - API使用例

URI (Java SE 17 & JDK 17) の使用例まとめです。
だいたいのメソッドを網羅済みです。
API仕様のおともにどうぞ。


概要

URI (Uniform Resource Identifier)参照を表します。

クラス構成

final var uri = new URI("https://example.com/java/index.html");
System.out.println(uri); // "https://example.com/java/index.html"
System.out.println(uri.getScheme()); // "https"
System.out.println(uri.getHost()); // "example.com"
System.out.println(uri.getPath()); // "/java/index.html"

関連するクラスとしてURLクラスがあります。
Java API 使用例 : URL」も参考にしていただけたら幸いです。

コンストラクタ

URI (String str)

指定された文字列を解析してURIを構築します。

似たAPIとして create(String str) があります。うまく使いわけましょう。

  • URI(String str) : str の解析に失敗するとチェック例外(URISyntaxException)がスローされます。
    つまり、解析に 失敗するかも しれない文字列であるときに使います。(ユーザー入力など)
  • URI.create(String str) : str の解析に失敗すると非チェック例外(IllegalArgumentException)がスローされます。
    つまり、解析に 失敗しない 文字列であることが事前にわかっているときに使います。(固定値など)
final var ret = new URI("");
System.out.println(ret); // ""
// 階層URI(絶対)
final var ret1 = new URI("http://example.com/languages/java/");
System.out.println(ret1); // "http://example.com/languages/java/"

final var ret2 = new URI("file:///~/calendar");
System.out.println(ret2); // "file:///~/calendar"
// 階層URI(相対)
final var ret1 = new URI("sample/a/index.html#28");
System.out.println(ret1); // "sample/a/index.html#28"

final var ret2 = new URI("../../demo/b/index.html");
System.out.println(ret2); // "../../demo/b/index.html"
// 不透明URI
final var ret1 = new URI("mailto:java-net@www.example.com");
System.out.println(ret1); // "mailto:java-net@www.example.com"

final var ret2 = new URI("news:comp.lang.java");
System.out.println(ret2); // "news:comp.lang.java"

final var ret3 = new URI("urn:isbn:096139210x");
System.out.println(ret3); // "urn:isbn:096139210x"
// エスケープ
final var uri1 = new URI("http://example.com/♪");
System.out.println(uri1); // "http://example.com/♪"
System.out.println(uri1.toASCIIString()); // "http://example.com/%E2%99%AA"
System.out.println(uri1.getRawPath()); // "/♪"
System.out.println(uri1.getPath()); // "/♪"

// %でエスケープ済みの文字はそのまま維持。
final var uri2 = new URI("http://example.com/%E2%99%AA");
System.out.println(uri2); // "http://example.com/%E2%99%AA"
System.out.println(uri2.toASCIIString()); // "http://example.com/%E2%99%AA
System.out.println(uri2.getRawPath()); // "/%E2%99%AA"
System.out.println(uri2.getPath()); // "/♪"
//new URI("a b"); // URISyntaxException
//new URI("http:"); // URISyntaxException

URI (String scheme, String ssp, String fragment)

指定されたコンポーネントからURIを構築します。

final var ret1 = new URI(null, null, null);
System.out.println(ret1); // ""

final var ret2 = new URI(null, null, "fragment");
System.out.println(ret2); // "#fragment"
// 階層URI(絶対)
final var ret1 = new URI("http", "//example.com/languages/java/index.html", "fragment");
System.out.println(ret1); // "http://example.com/languages/java/index.html#fragment"

final var ret2 = new URI("http", "//example.com/languages/java/", null);
System.out.println(ret2); // "http://example.com/languages/java/"

final var ret3 = new URI("file", "///~/calendar", null);
System.out.println(ret3); // "file:///~/calendar"
// 階層URI(相対)
final var ret1 = new URI(null, "sample/a/index.html", "28");
System.out.println(ret1); // "sample/a/index.html#28"

final var ret2 = new URI(null, "../../demo/b/index.html", null);
System.out.println(ret2); // "../../demo/b/index.html"
// 不透明URI
final var ret1 = new URI("mailto", "java-net@www.example.com", null);
System.out.println(ret1); // "mailto:java-net@www.example.com"

final var ret2 = new URI("news", "comp.lang.java", null);
System.out.println(ret2); // "news:comp.lang.java"

final var ret3 = new URI("urn", "isbn:096139210x", null);
System.out.println(ret3); // "urn:isbn:096139210x"
// エスケープ
final var uri1 = new URI("http", "//example.com/index.html", "♪");
System.out.println(uri1); // "http://example.com/index.html#♪"
System.out.println(uri1.toASCIIString()); // "http://example.com/index.html#%E2%99%AA"
System.out.println(uri1.getRawFragment()); // "♪"
System.out.println(uri1.getFragment()); // "♪"

// % → %25にエスケープされる。
final var uri2 = new URI("http", "//example.com/index.html", "%");
System.out.println(uri2); // "http://example.com/index.html#%25"
System.out.println(uri2.toASCIIString()); // "http://example.com/index.html#%25"
System.out.println(uri2.getRawFragment()); // "%25"
System.out.println(uri2.getFragment()); // "%"

// 空白→%20
final var uri = new URI("http", "//example.com/index.html", "a b");
System.out.println(uri); // "http://example.com/index.html#a%20b"
System.out.println(uri.toASCIIString()); // "http://example.com/index.html#a%20b"
System.out.println(uri.getRawFragment()); // "a%20b"
System.out.println(uri.getFragment()); // "a b"
//new URI("http", null, null); // URISyntaxException

URI (String scheme, String userInfo, String host, int port, String path, String query, String fragment)

指定されたコンポーネントから階層URIを構築します。

※このコンストラクタは不透明なURI ("mailto:java-net@www.example.com", "news:comp.lang.java"など)を構築するのには向いていません。

final var ret1 = new URI(null, null, null, -1, null, null, null);
System.out.println(ret1); // ""

final var ret2 = new URI("http", "user", "example.com", -1, null, null, null);
System.out.println(ret2); // "http://user@example.com"

final var ret3 = new URI("http", null, "example.com", 80, null, null, null);
System.out.println(ret3); // "http://example.com:80"

final var ret4 = new URI("http", "user", "example.com", 80, null, null, null);
System.out.println(ret4); // "http://user@example.com:80"

final var ret5 = new URI("http", null, "example.com", -1, "/sample", "query", "fragment");
System.out.println(ret5); // "http://example.com/sample?query#fragment"
// 階層URI(絶対)
final var ret1 = new URI("http", null, "example.com", -1, "/languages/java/", null, null);
System.out.println(ret1); // "http://example.com/languages/java/"

final var ret2 = new URI("file", null, null, -1, "///~/calendar", null, null);
System.out.println(ret2); // "file:///~/calendar"
// 階層URI(相対)
final var ret1 = new URI(null, null, null, -1, "sample/a/index.html", null, "28");
System.out.println(ret1); // "sample/a/index.html#28"

final var ret2 = new URI(null, null, null, -1, "sample/a/index.html", "query", "fragment");
System.out.println(ret2); // "sample/a/index.html?query#fragment"

final var ret3 = new URI(null, null, null, -1, "../../demo/b/index.html", null, null);
System.out.println(ret3); // "../../demo/b/index.html"
// エスケープ
final var uri1 = new URI("http", "×", "example.com", -1, "/♪", "〇", "△");
System.out.println(uri1); // "http://×@example.com/♪?〇#△"
System.out.println(uri1.toASCIIString()); // "http://%C3%97@example.com/%E2%99%AA?%E3%80%87#%E2%96%B3"
System.out.println(uri1.getRawUserInfo()); // "×"
System.out.println(uri1.getUserInfo()); // "×"
System.out.println(uri1.getRawPath()); // "/♪"
System.out.println(uri1.getPath()); // "/♪"
System.out.println(uri1.getRawQuery()); // "〇"
System.out.println(uri1.getQuery()); // "〇"
System.out.println(uri1.getRawFragment()); // "△"
System.out.println(uri1.getFragment()); // "△"

// % → %25にエスケープされる。
final var uri2 = new URI("http", "%a", "example.com", -1, "/%b", "%c", "%d");
System.out.println(uri2); // "http://%25a@example.com/%25b?%25c#%25d"
System.out.println(uri2.toASCIIString()); // "http://%25a@example.com/%25b?%25c#%25d"
System.out.println(uri2.getRawUserInfo()); // "%25a"
System.out.println(uri2.getUserInfo()); // "%a"
System.out.println(uri2.getRawPath()); // "/%25b"
System.out.println(uri2.getPath()); // "/%b"
System.out.println(uri2.getRawQuery()); // "%25c"
System.out.println(uri2.getQuery()); // "%c"
System.out.println(uri2.getRawFragment()); // "%25d"
System.out.println(uri2.getFragment()); // "%d"

// 空白→%20
final var uri3 = new URI("http", "u ser", "example.com", -1, "/pa th", "que ry", "frag ment");
System.out.println(uri3); // "http://u%20ser@example.com/pa%20th?que%20ry#frag%20ment"
System.out.println(uri3.toASCIIString()); // "http://u%20ser@example.com/pa%20th?que%20ry#frag%20ment"
System.out.println(uri3.getRawUserInfo()); // "u%20ser"
System.out.println(uri3.getUserInfo()); // "u ser"
System.out.println(uri3.getRawPath()); // "/pa%20th"
System.out.println(uri3.getPath()); // "/pa th"
System.out.println(uri3.getRawQuery()); // "que%20ry"
System.out.println(uri3.getQuery()); // "que ry"
System.out.println(uri3.getRawFragment()); // "frag%20ment"
System.out.println(uri3.getFragment()); // "frag ment"
//new URI("http", null, null, -1, null, null, null); // URISyntaxException
//new URI("http", null, "example.com", -1, "sample", null, null); // URISyntaxException

URI (String scheme, String host, String path, String fragment)

指定されたコンポーネントから階層URIを構築します。

このAPIは new URI(scheme, null, host, -1, path, null, fragment) と同等です。
API使用例はそちらのメソッドをご参照ください。

URI (String scheme, String authority, String path, String query, String fragment)

指定されたコンポーネントから階層URIを構築します。

※このコンストラクタは不透明なURI ("mailto:java-net@www.example.com", "news:comp.lang.java"など)を構築するのには向いていません。

final var ret1 = new URI(null, null, null, null, null);
System.out.println(ret1); // ""

final var ret2 = new URI("http", "example.com", null, null, null);
System.out.println(ret2); // "http://example.com"

final var ret3 = new URI("http", "user@example.com:80", null, null, null);
System.out.println(ret3); // "http://user@example.com:80"

final var ret4 = new URI("http", "user@example.com:80", "/sample", "query", "fragment");
System.out.println(ret4); // "http://user@example.com:80/sample?query#fragment"
// 階層URI(絶対)
final var ret1 = new URI("http", "example.com", "/languages/java/", null, null);
System.out.println(ret1); // "http://example.com/languages/java/"

final var ret2 = new URI("file", null, "///~/calendar", null, null);
System.out.println(ret2); // "file:///~/calendar"
// 階層URI(相対)
final var ret1 = new URI(null, null, "sample/a/index.html", null, "28");
System.out.println(ret1); // "sample/a/index.html#28"

final var ret2 = new URI(null, null, "../../demo/b/index.html", null, null);
System.out.println(ret2); // "../../demo/b/index.html"
// エスケープ
final var uri1 = new URI("http", "example.com", "/♪", "〇", "△");
System.out.println(uri1); // "http://example.com/♪?〇#△"
System.out.println(uri1.toASCIIString()); // "http://example.com/%E2%99%AA?%E3%80%87#%E2%96%B3"
System.out.println(uri1.getRawPath()); // "/♪"
System.out.println(uri1.getPath()); // "/♪"
System.out.println(uri1.getRawQuery()); // "〇"
System.out.println(uri1.getQuery()); // "〇"
System.out.println(uri1.getRawFragment()); // "△"
System.out.println(uri1.getFragment()); // "△"

// % → %25にエスケープされる。
final var uri2 = new URI("http", "example.com", "/%a", "%b", "%c");
System.out.println(uri2); // "http://example.com/%25a?%25b#%25c"
System.out.println(uri2.toASCIIString()); // "http://example.com/%25a?%25b#%25c"
System.out.println(uri2.getRawPath()); // "/%25a"
System.out.println(uri2.getPath()); // "/%a"
System.out.println(uri2.getRawQuery()); // "%25b"
System.out.println(uri2.getQuery()); // "%b"
System.out.println(uri2.getRawFragment()); // "%25c"
System.out.println(uri2.getFragment()); // "%c"

// 空白→%20
final var uri3 = new URI("http", "example.com", "/pa th", "que ry", "frag ment");
System.out.println(uri3); // "http://example.com/pa%20th?que%20ry#frag%20ment"
System.out.println(uri3.toASCIIString()); // "http://example.com/pa%20th?que%20ry#frag%20ment"
System.out.println(uri3.getRawPath()); // "/pa%20th"
System.out.println(uri3.getPath()); // "/pa th"
System.out.println(uri3.getRawQuery()); // "que%20ry"
System.out.println(uri3.getQuery()); // "que ry"
System.out.println(uri3.getRawFragment()); // "frag%20ment"
System.out.println(uri3.getFragment()); // "frag ment"
//new URI("http", null, null, null, null); // URISyntaxException
//new URI("http", "example.com", "sample", null, null); // URISyntaxException

メソッド

int compareTo (URI that)

このURIを別のオブジェクトと比較します。そのオブジェクトはURIである必要があります。

// 同じスキームと機関を持つ階層URI
final var uri1 = URI.create("http://example.com/a");
final var uri2 = URI.create("http://example.com/a");
final var uri3 = URI.create("http://example.com/A");

System.out.println(uri1.compareTo(uri2)); // 0 ("a" = "a")
System.out.println(uri1.compareTo(uri3)); // 32 ("a" > "A")

final var uri4 = URI.create("http://example.com/b");
final var uri5 = URI.create("http://example.com/B");

System.out.println(uri1.compareTo(uri4)); // -1 ("a" < "b")
System.out.println(uri1.compareTo(uri5)); // 31 ("a" > "B")
// 同じスキームと機関を持つ階層URI(クエリ・フラグメントあり)
final var uri1 = URI.create("http://example.com/a");
final var uri2 = URI.create("http://example.com/a?b");
final var uri3 = URI.create("http://example.com/a?c");
final var uri4 = URI.create("http://example.com/a?B");

System.out.println(uri1.compareTo(uri2)); // -1 ("a" < "a?b")
System.out.println(uri2.compareTo(uri3)); // -1 ("a?b" < "a?c")
System.out.println(uri2.compareTo(uri4)); // 32 ("a?b" > "a?B")

final var uri5 = URI.create("http://example.com/a#b");
final var uri6 = URI.create("http://example.com/a#c");
final var uri7 = URI.create("http://example.com/a#B");

System.out.println(uri1.compareTo(uri5)); // -1 ("a" < "a#b")
System.out.println(uri2.compareTo(uri5)); // 1  ("a?b" > "a#b")
System.out.println(uri5.compareTo(uri6)); // -1 ("a#b" < "a#c")
System.out.println(uri5.compareTo(uri7)); // 32 ("a#b" > "a#B")

final var uri8 = URI.create("http://example.com/a?b#b");
final var uri9 = URI.create("http://example.com/a?b#c");
final var uri10 = URI.create("http://example.com/a?b#B");

System.out.println(uri1.compareTo(uri8)); // -1 ("a" < "a?b#b")
System.out.println(uri2.compareTo(uri8)); // -1 ("a?b" < "a?b#b")
System.out.println(uri5.compareTo(uri8)); // -1 ("a#b" < "a?b#b")
System.out.println(uri8.compareTo(uri9)); // -1 ("a?b#b" < "a?b#c")
System.out.println(uri8.compareTo(uri10)); // 32 ("a?b#b" > "a?b#B")
// スキームが違う場合、スキームの大文字・小文字区別なしで比較。
final var uri1 = URI.create("http://example.com/a");

final var uri2 = URI.create("https://example.com/a");
final var uri3 = URI.create("HTTP://example.com/a");
final var uri4 = URI.create("HTTPS://example.com/a");
final var uri5 = URI.create("aaaa://example.com/a");

System.out.println(uri1.compareTo(uri2)); // -1 ("http" < "https")
System.out.println(uri1.compareTo(uri3)); // 0 ("http" = "HTTP")
System.out.println(uri1.compareTo(uri4)); // -1 ("http" < "HTTPS")
System.out.println(uri1.compareTo(uri5)); // 7 ("http" > "aaaa")
// 階層URIと同じスキームを持つ不透明URIは、階層URIのほうが常に小さくなります。
final var uri1 = URI.create("http://www.example.com");

final var uri2 = URI.create("http:example.com");
final var uri3 = URI.create("http:www.example.com");

System.out.println(uri1.compareTo(uri2)); // -1
System.out.println(uri1.compareTo(uri3)); // -1

// 文字列で比較した結果。
System.out.println("www.example.com".compareTo("example.com")); // 18
// 同じスキームを持つ不透明URI
final var uri1 = URI.create("mailto:aaa@example.com");
final var uri2 = URI.create("mailto:bbb@example.com");
final var uri3 = URI.create("mailto:BBB@example.com");

System.out.println(uri1.compareTo(uri2)); // -1 ("aaa" < "bbb")
System.out.println(uri1.compareTo(uri3)); // 31 ("aaa" > "BBB")

// スキーム固有部分も同じでフラグメントが違う場合
final var uri4 = URI.create("mailto:aaa@example.com#xxx");
final var uri5 = URI.create("mailto:aaa@example.com#yyy");

System.out.println(uri1.compareTo(uri4)); // -1 (null < "xxx")
System.out.println(uri1.compareTo(uri5)); // -1 (null < "yyy")
System.out.println(uri5.compareTo(uri4)); // 1 ("yyy" > "xxx")
// 同じスキームを持ち機関が違う階層URI

// ホストの大文字・小文字の区別なし
final var uri1 = URI.create("http://example.com/a");
final var uri2 = URI.create("http://www.example.com/a");
final var uri3 = URI.create("http://EXAMPLE.com/a");

System.out.println(uri1.compareTo(uri2)); // -18 ("example.com" < "www.example.com")
System.out.println(uri1.compareTo(uri3)); // 0 ("example.com" = "EXAMPLE.com")

// ユーザ名は大文字・小文字区別あり。
final var uri4 = URI.create("http://user-a@example.com/a");
final var uri5 = URI.create("http://user-b@example.com/a");
final var uri6 = URI.create("http://user-A@example.com/a");

System.out.println(uri4.compareTo(uri5)); // -1 ("user-a" < "user-b")
System.out.println(uri4.compareTo(uri6)); // 32 ("user-a" > "user-A")

final var uri7 = URI.create("http://user-a@example.com:80/a");
final var uri8 = URI.create("http://user-a@example.com:8080/a");

System.out.println(uri7.compareTo(uri8)); // -8000 (80 < 8080)
// エスケープ(基本的にgetRawXxxxメソッドの結果で比較されます)

final var uri1 = new URI("http", "example.com", "/a b c", null);
System.out.println(uri1.toASCIIString()); // "http://example.com/a%20b%20c"
System.out.println(uri1.getPath()); // "//a b c"
System.out.println(uri1.getRawPath()); // "/a%20b%20c"

final var uri2 = URI.create("http://example.com/a%20b%20c");
System.out.println(uri2.toASCIIString()); // "http://example.com/a%20b%20c"
System.out.println(uri2.getPath()); // "/a b c"
System.out.println(uri2.getRawPath()); // "/a%20b%20c"

System.out.println(uri1.compareTo(uri2)); // 0

final var uri3 = new URI("http", "example.com", "/♪", null);
System.out.println(uri3.toASCIIString()); // "http://example.com/%E2%99%AA"
System.out.println(uri3.getPath()); // "/♪"
System.out.println(uri3.getRawPath()); // "/♪"

final var uri4 = URI.create("http://example.com/%E2%99%AA");
System.out.println(uri4.toASCIIString()); // "http://example.com/%E2%99%AA"
System.out.println(uri4.getPath()); // "/♪"
System.out.println(uri4.getRawPath()); // "/%E2%99%AA"

System.out.println(uri3.compareTo(uri4)); // 9797

static URI create (String str)

指定された文字列を解析してURIを作成します。

このAPIは、コンストラクタの URI(String str)ほぼ同等です。

URI.create(String str)は解析に失敗すると非チェック例外の IllegalArgumentException をスローします。
URI(String str)は、代わりにチェック例外の URISyntaxException をスローします。

final var ret = URI.create("");
System.out.println(ret); // ""
// 階層URI(絶対)
final var ret1 = URI.create("http://example.com/languages/java/");
System.out.println(ret1); // "http://example.com/languages/java/"

final var ret2 = URI.create("file:///~/calendar");
System.out.println(ret2); // "file:///~/calendar"
// 階層URI(相対)
final var ret1 = URI.create("sample/a/index.html#28");
System.out.println(ret1); // "sample/a/index.html#28"

final var ret2 = URI.create("../../demo/b/index.html");
System.out.println(ret2); // "../../demo/b/index.html"
// 不透明URI
final var ret1 = URI.create("mailto:java-net@www.example.com");
System.out.println(ret1); // "mailto:java-net@www.example.com"

final var ret2 = URI.create("news:comp.lang.java");
System.out.println(ret2); // "news:comp.lang.java"

final var ret3 = URI.create("urn:isbn:096139210x");
System.out.println(ret3); // "urn:isbn:096139210x"
// エスケープ
final var uri1 = URI.create("http://example.com/♪");
System.out.println(uri1); // "http://example.com/♪"
System.out.println(uri1.toASCIIString()); // "http://example.com/%E2%99%AA"
System.out.println(uri1.getRawPath()); // "/♪"
System.out.println(uri1.getPath()); // "/♪"

// %でエスケープ済みの文字はそのまま維持。
final var uri2 = URI.create("http://example.com/%E2%99%AA");
System.out.println(uri2); // "http://example.com/%E2%99%AA"
System.out.println(uri2.toASCIIString()); // "http://example.com/%E2%99%AA"
System.out.println(uri2.getRawPath()); // "/%E2%99%AA"
System.out.println(uri2.getPath()); // "/♪"
//URI.create("space space"); // IllegalArgumentException
//URI.create("http:"); // IllegalArgumentException

boolean equals (Object ob)

このURIが別のオブジェクトと等しいかどうかを判定します。

// 同じスキームと機関を持つ階層URI
final var uri1 = URI.create("http://example.com/a");
final var uri2 = URI.create("http://example.com/a");
final var uri3 = URI.create("http://example.com/A");

System.out.println(uri1.equals(uri2)); // true ("a" = "a")
System.out.println(uri1.equals(uri3)); // false ("a" != "A")
// 同じスキームと機関を持つ階層URI(クエリ・フラグメントあり)
final var uri1 = URI.create("http://example.com/a?b");
final var uri2 = URI.create("http://example.com/a?c");
final var uri3 = URI.create("http://example.com/a?B");

System.out.println(uri1.equals(uri2)); // false ("a?b" != "a?c")
System.out.println(uri1.equals(uri3)); // false ("a?b" != "a?B")

final var uri4 = URI.create("http://example.com/a#b");
final var uri5 = URI.create("http://example.com/a#c");
final var uri6 = URI.create("http://example.com/a#B");

System.out.println(uri4.equals(uri5)); // false ("a#b" != "a#c")
System.out.println(uri4.equals(uri6)); // false ("a#b" != "a#B")

final var uri7 = URI.create("http://example.com/a?b#b");
final var uri8 = URI.create("http://example.com/a?b#c");
final var uri9 = URI.create("http://example.com/a?b#B");

System.out.println(uri7.equals(uri8)); // false ("a?b#b" != "a?b#c")
System.out.println(uri7.equals(uri9)); // false ("a?b#b" != "a?b#B")
// スキームが違う場合、スキームの大文字・小文字区別なしで比較。
final var uri1 = URI.create("http://example.com/a");

final var uri2 = URI.create("https://example.com/a");
final var uri3 = URI.create("HTTP://example.com/a");
final var uri4 = URI.create("HTTPS://example.com/a");
final var uri5 = URI.create("aaaa://example.com/a");

System.out.println(uri1.equals(uri2)); // false ("http" != "https")
System.out.println(uri1.equals(uri3)); // true ("http" = "HTTP")
System.out.println(uri1.equals(uri4)); // false ("http" != "HTTPS")
System.out.println(uri1.equals(uri5)); // false ("http" != "aaaa")
// 階層URIと同じスキームを持つ不透明URI
final var uri1 = URI.create("http://example.com");

final var uri2 = URI.create("http:example.com");
final var uri3 = URI.create("http:www.example.com");

System.out.println(uri1.equals(uri2)); // false
System.out.println(uri1.equals(uri3)); // false
// 同じスキームを持つ不透明URI
final var uri1 = URI.create("mailto:aaa@example.com");
final var uri2 = URI.create("mailto:bbb@example.com");
final var uri3 = URI.create("mailto:AAA@example.com");

System.out.println(uri1.equals(uri2)); // false ("aaa" != "bbb")
System.out.println(uri1.equals(uri3)); // false ("aaa" != "AAA")

// スキーム固有部分も同じでフラグメントが違う場合
final var uri4 = URI.create("mailto:aaa@example.com#xxx");
final var uri5 = URI.create("mailto:aaa@example.com#yyy");

System.out.println(uri1.equals(uri4)); // false (null != "xxx")
System.out.println(uri1.equals(uri5)); // false (null != "yyy")
System.out.println(uri5.equals(uri4)); // false ("yyy" != "xxx")
// 同じスキームを持ち機関が違う階層URI

// ホストの大文字・小文字の区別なし
final var uri1 = URI.create("http://example.com/a");
final var uri2 = URI.create("http://www.example.com/a");
final var uri3 = URI.create("http://EXAMPLE.com/a");

System.out.println(uri1.equals(uri2)); // false ("example.com" != "www.example.com")
System.out.println(uri1.equals(uri3)); // true ("example.com" = "EXAMPLE.com")

// ユーザ名は大文字・小文字区別あり。
final var uri4 = URI.create("http://user-a@example.com/a");
final var uri5 = URI.create("http://user-b@example.com/a");
final var uri6 = URI.create("http://user-A@example.com/a");

System.out.println(uri4.equals(uri5)); // false ("user-a" != "user-b")
System.out.println(uri4.equals(uri6)); // false ("user-a" != "user-A")

final var uri7 = URI.create("http://user-a@example.com:80/a");
final var uri8 = URI.create("http://user-a@example.com:8080/a");

System.out.println(uri7.equals(uri8)); // false (80 != 8080)
// エスケープ(基本的にgetRawXxxxメソッドの結果で比較されます)

final var uri1 = new URI("http", "example.com", "/a b c", null);
System.out.println(uri1.toASCIIString()); // "http://example.com/a%20b%20c"
System.out.println(uri1.getPath()); // "//a b c"
System.out.println(uri1.getRawPath()); // "/a%20b%20c"

final var uri2 = URI.create("http://example.com/a%20b%20c");
System.out.println(uri2.toASCIIString()); // "http://example.com/a%20b%20c"
System.out.println(uri2.getPath()); // "/a b c"
System.out.println(uri2.getRawPath()); // "/a%20b%20c"

System.out.println(uri1.equals(uri2)); // true

final var uri3 = new URI("http", "example.com", "/♪", null);
System.out.println(uri3.toASCIIString()); // "http://example.com/%E2%99%AA"
System.out.println(uri3.getPath()); // "/♪"
System.out.println(uri3.getRawPath()); // "/♪"

final var uri4 = URI.create("http://example.com/%E2%99%AA");
System.out.println(uri4.toASCIIString()); // "http://example.com/%E2%99%AA"
System.out.println(uri4.getPath()); // "/♪"
System.out.println(uri4.getRawPath()); // "/%E2%99%AA"

System.out.println(uri3.equals(uri4)); // false
// URI以外のオブジェクトとの比較(常にfalse)
final var s = "http://example.com/a";
final var uri = URI.create(s);
System.out.println(uri.equals(s)); // false

String getAuthority ()

このURIのデコードされた機関コンポーネントを返します。

final var uri1 = URI.create("http://user@example.com:80/");
System.out.println(uri1.getAuthority()); // "user@example.com:80"
System.out.println(uri1.getRawAuthority()); // "user@example.com:80"
System.out.println(uri1.getHost()); // "example.com"

final var uri2 = URI.create("mailto:java-net@www.example.com");
System.out.println(uri2.getAuthority()); // null
System.out.println(uri2.getRawAuthority()); // null
System.out.println(uri2.getHost()); // null

final var uri3 = new URI("http", "us er", "example.com", -1, null, null, null);
System.out.println(uri3.getAuthority()); // "us er@example.com"
System.out.println(uri3.getRawAuthority()); // "us%20er@example.com"
System.out.println(uri3.getHost()); // "example.com"

String getFragment ()

このURIのデコードされたフラグメント・コンポーネントを返します。

final var uri1 = URI.create("http://example.com/path#abc");
System.out.println(uri1.getFragment()); // "abc"
System.out.println(uri1.getRawFragment()); // "abc"

final var uri2 = URI.create("http://example.com/path");
System.out.println(uri2.getFragment()); // null
System.out.println(uri2.getRawFragment()); // null

final var uri3 = new URI("http", "example.com", "/path", null, "a b c");
System.out.println(uri3); // "http://example.com/path#a%20b%20c"
System.out.println(uri3.getFragment()); // "a b c"
System.out.println(uri3.getRawFragment()); // "a%20b%20c"

String getHost ()

このURIのホスト・コンポーネントを返します。

final var uri1 = URI.create("http://user@example.com:80/");
System.out.println(uri1.getHost()); // "example.com"
System.out.println(uri1.getAuthority()); // "user@example.com:80"

final var uri2 = URI.create("mailto:java-net@www.example.com");
System.out.println(uri2.getHost()); // null
System.out.println(uri2.getAuthority()); // null

String getPath ()

このURIのデコードされたパス・コンポーネントを返します。

final var uri1 = URI.create("http://example.com/path/aaa/index.html");
System.out.println(uri1.getPath()); // "/path/aaa/index.html"
System.out.println(uri1.getRawPath()); // "/path/aaa/index.html"

final var uri2 = URI.create("news:comp.lang.java");
System.out.println(uri2.getPath()); // null
System.out.println(uri2.getRawPath()); // null

final var uri3 = new URI("http", "example.com", "/pa th", null);
System.out.println(uri3); // "http://example.com/pa%20th"
System.out.println(uri3.getPath()); // "/pa th"
System.out.println(uri3.getRawPath()); // "/pa%20th"

int getPort ()

このURIのポート番号を返します。

final var uri1 = URI.create("http://example.com:80/path");
System.out.println(uri1.getPort()); // 80

final var uri2 = URI.create("http://example.com/path");
System.out.println(uri2.getPort()); // -1

String getQuery ()

このURIのデコードされたクエリー・コンポーネントを返します。

final var uri1 = URI.create("http://example.com/path?query");
System.out.println(uri1.getQuery()); // "query"
System.out.println(uri1.getRawQuery()); // "query"

final var uri2 = URI.create("http://example.com/path");
System.out.println(uri2.getQuery()); // null
System.out.println(uri2.getRawQuery()); // null

final var uri3 = new URI("http", null, "example.com", -1, "/path", "qu ery", null);
System.out.println(uri3); // "http://example.com/path?qu%20ery"
System.out.println(uri3.getQuery()); // "qu ery"
System.out.println(uri3.getRawQuery()); // "qu%20ery"

String getRawAuthority ()

このURIのそのままの機関コンポーネントを返します。

このメソッドの使用例は、getAuthority() にまとめて記載しました。
そちらのAPI使用例をご参照ください。

String getRawFragment ()

このURIのそのままのフラグメント・コンポーネントを返します。

このメソッドの使用例は、getFragment() にまとめて記載しました。
そちらのAPI使用例をご参照ください。

String getRawPath ()

このURIのそのままのパス・コンポーネントを返します。

このメソッドの使用例は、getPath() にまとめて記載しました。
そちらのAPI使用例をご参照ください。

String getRawQuery ()

このURIのそのままのクエリー・コンポーネントを返します。

このメソッドの使用例は、getQuery() にまとめて記載しました。
そちらのAPI使用例をご参照ください。

String getRawSchemeSpecificPart ()

このURIのそのままのスキーム固有部分を返します。

このメソッドの使用例は、getSchemeSpecificPart() にまとめて記載しました。
そちらのAPI使用例をご参照ください。

String getRawUserInfo ()

このURIのそのままのユーザー情報コンポーネントを返します。

このメソッドの使用例は、getUserInfo() にまとめて記載しました。
そちらのAPI使用例をご参照ください。

String getScheme ()

このURIのスキーム・コンポーネントを返します。

final var uri1 = URI.create("http://example.com/path");
System.out.println(uri1.getScheme()); // "http"

final var uri2 = URI.create("news:comp.lang.java");
System.out.println(uri2.getScheme()); // "news"

final var uri3 = URI.create("urn:isbn:096139210x");
System.out.println(uri3.getScheme()); // "urn"

final var uri4 = URI.create("../../demo/b/index.html");
System.out.println(uri4.getScheme()); // null

String getSchemeSpecificPart ()

このURIのデコードされたスキーム固有部分を返します。

final var uri1 = URI.create("http://user@example.com:80/path?query#fragment");
System.out.println(uri1.getSchemeSpecificPart()); // "//user@example.com:80/path?query"
System.out.println(uri1.getRawSchemeSpecificPart()); // "//user@example.com:80/path?query"

final var uri2 = URI.create("news:comp.lang.java");
System.out.println(uri2.getSchemeSpecificPart()); // "comp.lang.java"
System.out.println(uri2.getRawSchemeSpecificPart()); // "comp.lang.java"

final var uri3 = URI.create("#fragment");
System.out.println(uri3.getSchemeSpecificPart()); // ""
System.out.println(uri3.getRawSchemeSpecificPart()); // ""

final var uri4 = new URI("http", "us er", "example.com", 80, "/path", "query", "fragment");
System.out.println(uri4); // "http://us%20er@example.com:80/path?query#fragment"
System.out.println(uri4.getSchemeSpecificPart()); // "//us er@example.com:80/path?query"
System.out.println(uri4.getRawSchemeSpecificPart()); // "//us%20er@example.com:80/path?query"

String getUserInfo ()

このURIのデコードされたユーザー情報コンポーネントを返します。

final var uri1 = URI.create("http://user@example.com:80/path");
System.out.println(uri1.getUserInfo()); // "user"
System.out.println(uri1.getRawUserInfo()); // "user"

final var uri2 = URI.create("http://example.com/path");
System.out.println(uri2.getUserInfo()); // null
System.out.println(uri2.getRawUserInfo()); // null

final var uri3 = new URI("http", "us er", "example.com", 80, "/path", null, null);
System.out.println(uri3); // "http://us%20er@example.com:80/path"
System.out.println(uri3.getUserInfo()); // "us er"
System.out.println(uri3.getRawUserInfo()); // "us%20er"

int hashCode ()

このURIのハッシュ・コード値を返します。

※大文字・小文字を区別する・しないなどについては compareTo や equals メソッドをご参照ください。

final var uri1 = URI.create("http://example.com/a");
System.out.println(uri1.hashCode()); // 1387131798

final var uri2 = URI.create("https://example.com/a");
System.out.println(uri2.hashCode()); // 1712578137

final var uri3 = URI.create("HTTP://example.com/a");
System.out.println(uri3.hashCode()); // 1387131798

boolean isAbsolute ()

このURIが絶対かどうかを通知します。

// 階層URI(絶対)
final var uri1 = URI.create("http://example.com/languages/java/");
System.out.println(uri1.isAbsolute()); // true

final var uri2 = URI.create("file:///~/calendar");
System.out.println(uri2.isAbsolute()); // true
// 階層URI(相対)
final var uri1 = URI.create("sample/a/index.html#28");
System.out.println(uri1.isAbsolute()); // false

final var uri2 = URI.create("../../demo/b/index.html");
System.out.println(uri2.isAbsolute()); // false
// 不透明URI
final var uri1 = URI.create("mailto:java-net@www.example.com");
System.out.println(uri1.isAbsolute()); // true

final var uri2 = URI.create("news:comp.lang.java");
System.out.println(uri2.isAbsolute()); // true

boolean isOpaque ()

このURIが不透明かどうかを通知します。

// 階層URI(絶対)
final var uri1 = URI.create("http://example.com/languages/java/");
System.out.println(uri1.isOpaque()); // false

final var uri2 = URI.create("file:///~/calendar");
System.out.println(uri2.isOpaque()); // false
// 階層URI(相対)
final var uri1 = URI.create("sample/a/index.html#28");
System.out.println(uri1.isOpaque()); // false

final var uri2 = URI.create("../../demo/b/index.html");
System.out.println(uri2.isOpaque()); // false
// 不透明URI
final var uri1 = URI.create("mailto:java-net@www.example.com");
System.out.println(uri1.isOpaque()); // true

final var uri2 = URI.create("news:comp.lang.java");
System.out.println(uri2.isOpaque()); // true

URI normalize ()

このURIのパスを正規化します。

final var uri1 = URI.create("http://example.com/languages/java/");
System.out.println(uri1.normalize()); // "http://example.com/languages/java/"

final var uri2 = URI.create("http://example.com/languages/../java/");
System.out.println(uri2.normalize()); // "http://example.com/java/"

final var uri3 = URI.create("http://example.com/languages/./java/");
System.out.println(uri3.normalize()); // "http://example.com/languages/java/"

final var uri4 = URI.create("mailto:java-net@www.example.com");
System.out.println(uri4.normalize()); // "mailto:java-net@www.example.com"

final var uri5 = URI.create("sample/a/index.html#28");
System.out.println(uri5.normalize()); // "sample/a/index.html#28"

final var uri6 = URI.create("sample/../a/index.html#28");
System.out.println(uri6.normalize()); // "a/index.html#28"

final var uri7 = URI.create("./sample/a/index.html#28");
System.out.println(uri7.normalize()); // "sample/a/index.html#28"

final var uri8 = URI.create("../../demo/b/index.html");
System.out.println(uri8.normalize()); // "../../demo/b/index.html"

URI parseServerAuthority ()

このURIの機関コンポーネント(定義されている場合)からユーザー情報、ホスト、およびポートの各コンポーネントへの解析を試みます。

final var uri1 = URI.create("http://example.com/languages/java/");
System.out.println(uri1.parseServerAuthority()); // "http://example.com/languages/java/"

final var uri2 = URI.create("mailto:java-net@www.example.com");
System.out.println(uri2.parseServerAuthority()); // "mailto:java-net@www.example.com"

final var uri3 = URI.create("sample/a/index.html#28");
System.out.println(uri3.parseServerAuthority()); // "sample/a/index.html#28"

final var uri4 = URI.create("//foo:bar");
//uri4.parseServerAuthority(); // URISyntaxException

URI relativize (URI uri)

指定されたURIをこのURIに対して相対化します。

final var uri1 = URI.create("http://example.com/");
final var uri2 = URI.create("http://example.com/aaa");
final var uri3 = URI.create("http://example.com/aaa/bbb");

System.out.println(uri1.relativize(uri2)); // "aaa"
System.out.println(uri1.relativize(uri3)); // "aaa/bbb"

System.out.println(uri2.relativize(uri1)); // "http://example.com/"
System.out.println(uri2.relativize(uri3)); // "bbb"

System.out.println(uri3.relativize(uri1)); // "http://example.com/"
System.out.println(uri3.relativize(uri2)); // "http://example.com/aaa"
final var uri1 = URI.create("http://example.com/");
final var uri2 = URI.create("http://example.com/aaa?query#fragment");

System.out.println(uri1.relativize(uri2)); // "aaa?query#fragment"
System.out.println(uri2.relativize(uri1)); // "http://example.com/"
final var uri1 = URI.create("http://example.com/");
final var uri2 = URI.create("https://example.com/aaa");
final var uri3 = URI.create("mailto:java-net@www.example.com");
final var uri4 = URI.create("//foo:bar");

System.out.println(uri1.relativize(uri2)); // "https://example.com/aaa"
System.out.println(uri1.relativize(uri3)); // "mailto:java-net@www.example.com"
System.out.println(uri1.relativize(uri4)); // "//foo:bar"
final var uri1 = URI.create("http://example.com/");
final var uri2 = URI.create("http://user@example.com:80/aaa");

System.out.println(uri1.relativize(uri2)); // "http://user@example.com:80/aaa"
System.out.println(uri2.relativize(uri1)); // "http://example.com/"

URI resolve (String str)

指定された文字列を解析し、その後その文字列をこのURIに対して解決して、新しいURIを構築します。

このAPIは URI.resolve(URI.create(str)) と同等です。
API使用例はそちらのメソッドをご参照ください。

URI resolve (URI uri)

指定されたURIをこのURIに対して解決します。

final var uri1 = URI.create("http://example.com/languages/java/");
final var uri2 = URI.create("sample/a/index.html#28");
final var uri3 = URI.create("../../demo/b/index.html");

System.out.println(uri1.resolve(uri2)); // "http://example.com/languages/java/sample/a/index.html#28"
System.out.println(uri1.resolve(uri3)); // "http://example.com/demo/b/index.html"
System.out.println(uri1.resolve(uri2).resolve(uri3)); // "http://example.com/languages/java/demo/b/index.html"

System.out.println(uri2.resolve(uri1)); // "http://example.com/languages/java/"
System.out.println(uri2.resolve(uri3)); // "demo/b/index.html"

System.out.println(uri3.resolve(uri1)); // "http://example.com/languages/java/"
System.out.println(uri3.resolve(uri2)); // "../../demo/b/sample/a/index.html#28"
final var uri1 = URI.create("http://example.com/");
System.out.println(uri1); // "http://example.com/"

final var uri2 = uri1.resolve(URI.create("aaa/"));
System.out.println(uri2);  // "http://example.com/aaa/"

final var uri3 = uri2.resolve(URI.create("bbb/"));
System.out.println(uri3); // "http://example.com/aaa/bbb/"

final var uri4 = uri3.resolve(URI.create("index.html?uuu#vvv"));
System.out.println(uri4); // "http://example.com/aaa/bbb/index.html?uuu#vvv"

final var uri5 = uri4.resolve(URI.create("index.html?www#xxx"));
System.out.println(uri5); // "http://example.com/aaa/bbb/index.html?www#xxx"
final var uri1 = URI.create("");
System.out.println(uri1); // ""

final var uri2 = uri1.resolve(URI.create("aaa/"));
System.out.println(uri2); // "aaa/"

final var uri3 = uri2.resolve(URI.create("bbb/"));
System.out.println(uri3); // "aaa/bbb/"

final var uri4 = uri3.resolve(URI.create("index.html?uuu#vvv"));
System.out.println(uri4); // "aaa/bbb/index.html?uuu#vvv"

final var uri5 = uri4.resolve(URI.create("index.html?www#xxx"));
System.out.println(uri5); // "aaa/bbb/index.html?www#xxx"
final var uri1 = URI.create("http://example.com/aaa.index");
final var uri2 = new URI(null, "www.example.com", "/bbb.index", null);
System.out.println(uri2); // "//www.example.com/bbb.index"

System.out.println(uri1.resolve(uri2)); // "http://www.example.com/bbb.index"
System.out.println(uri2.resolve(uri1)); // "http://example.com/aaa.index"
final var uri1 = URI.create("http://example.com/");
final var uri2 = URI.create("mailto:java-net@www.example.com");

System.out.println(uri1.resolve(uri2)); // "mailto:java-net@www.example.com"
System.out.println(uri2.resolve(uri1)); // "http://example.com/"
final var uri1 = URI.create("http://example.com/index.html");
final var uri2 = URI.create("#foo");

System.out.println(uri1.resolve(uri2)); // "http://example.com/index.html#foo"

String toASCIIString ()

このURIのコンテンツをUS-ASCII文字列として返します。

このメソッドの使用例は、toString() にまとめて記載しました。
そちらのAPI使用例をご参照ください。

String toString ()

このURIのコンテンツを文字列として返します。

final var uri1 = URI.create("http://example.com/languages/java/");
System.out.println(uri1.toString()); // "http://example.com/languages/java/"
System.out.println(uri1.toASCIIString()); // "http://example.com/languages/java/"

final var uri2 = URI.create("news:comp.lang.java");
System.out.println(uri2.toString()); // "news:comp.lang.java"
System.out.println(uri2.toASCIIString()); // "news:comp.lang.java"

final var uri3 = URI.create("http://example.com/♪");
System.out.println(uri3.toString()); // "http://example.com/♪"
System.out.println(uri3.toASCIIString());  // "http://example.com/%E2%99%AA"

final var uri4 = new URI("http", "example.com", "/a b c", null);
System.out.println(uri4.toString()); // "http://example.com/a%20b%20c"
System.out.println(uri4.toASCIIString()); // "http://example.com/a%20b%20c"

URL toURL ()

このURIからURLを構築します。

final var uri1 = URI.create("http://example.com/languages/java/");
System.out.println(uri1.toURL()); // "http://example.com/languages/java/"

final var uri2 = URI.create("../../demo/b/index.html");
//uri2.toURL(); // IllegalArgumentException (URI is not absolute)

final var uri3 = URI.create("news:comp.lang.java");
//uri3.toURL(); // MalformedURLException (unknown protocol: news)

関連記事

  • API 使用例
ページの先頭へ