LoginSignup
3
0

More than 5 years have passed since last update.

java.net.URL#getPathの気になるところを調べた

Last updated at Posted at 2018-04-23

記事の内容はJava8で検証しています。

概要

getPath()で得られる文字列での'/'の扱いがどうなっているのか、コード書くたびにドキドキするのでメモ。

まとめ

  • パスが完全に省略されていても、'/'だけは返される
    • ただしhostとpathの両方が存在しない場合、空文字列が返る
  • 末尾の'/'は省略されない
    • そもそも省略されるべきではないので指摘すべきでもないが

URL getPath()
http://host /
http://host/ /
http://host/path /path
http://host/path/ /path/
http://host?query /
http://host/?query /
http://host/path?query /path
http://host/path/?query /path/
http:// (空文字列)
http:/// /
http:///path /path

留意すべき点

  • '/'で始まることが保証されるので、次のような記述は問題ない
path.startsWith("/path");
  • '/'で始まることが保証されるので、split("/")で要素を切り出すと最初の要素は必ず空文字列になる…読み飛ばす必要がある
    • ただし"/"だけのパスの場合、split("/")はサイズ0の配列を返すことに要注意
String a[]=path.split("/");
if(a[1].equals("path")) {} //パスが"/"の場合に例外発生
  • 末尾の'/'は省略されないので、次のような記述は注意が必要
path.endsWith("tail"); //"/path/tail/"だった場合には偽となる
  • getPath()がnullを返すことはたぶんない
    • コンストラクタにURL文字列を渡してインスタンスを生成する分にはnullにはならないはず
3
0
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
3
0