素敵なサムシングを独断と偏見で一方的に紹介するブログ(´・ω・`)

IT

【Restful API】Java8でURLのパスの先頭や途中、末尾の文字列をPathsクラスを利用して分解・取得する方法【簡単便利】

投稿日:

スポンサーリンク

336×280




URLに含まれるパスの文字列を取得したい

先日、URL文字列に含まれている文字列を取得したい、という要件が出てきました。

例えば、https://blogenist.jp/2018/12/02/7077という文字列があった場合に、post_idを表す7077という値を取得したい、と言うケースです。

正規表現等を利用すれば力技で取得する事は可能ですが、黒魔術になりがちなので筆者としては避けたかった為、いろいろ調べてみたところ、Javaのjava.nio.fileパッケージに含まれるPathsクラスを利用することで簡単に取得する事が出来ました。

手順

対象文字列をPathクラスにラップ

まずはこのURL文字列を扱いやすくするために、Pathsクラスのstaticメソッドであるgetメソッドを利用してPathクラスを生成しましょう。

getFileNameメソッドで末尾のパス文字列を取得

次にPathクラスのgetFileNameメソッドを利用して、末尾の文字列情報を取得します。
ちなみに、このメソッドの戻り値はPathクラスとなっているので、しっかりとtoString()メソッドを利用して文字列化する必要があります。

確認

では、result変数を標準出力して動作確認をしてみましょう。

期待通りの値が取得できましたね♪

Paths.getはFileSystems.getDefault().getPathと同じ

今回利用したPaths.getメソッドはFileSystems.getDefault().getPathの省略表現となっています。
なので、FileSystems.getDefault().getPathを利用しても同じ動きは取れます。

ですが、直感的にもわかりやすいので、Paths.getメソッドを使うことを推奨します。

スラッシュ(/)終わりの場合はどうなる?

URLによってはスラッシュ(/)終わりの場合もありえますよね。
その場合も正しく動くか確認してみましょう。

スラッシュ終わりでも、問題なく同様の値が取得できましたね♪
気にする必要は無さそうです。

他のメソッドも試してみよう。

Pathクラスには他にも様々なメソッドがあったのできになるものを試してみました。

getRoot

まずはgetRootメソッドです。
以下のようなソースで実行してみましょう。

まさかのぬるぽエラーです・・・!

どうやら、getRootメソッドは対象のパスがルート・コンポーネントを持たない場合nullを返します。
今回はURLパスのためルートの概念が存在しないためぬるぽが発生したと思われます。

以下のようなディレクトリパスの場合は正しく処理が実行されました。

URLパスの場合に、getRootメソッドでドメインが取得出来るわけではないので、気をつけたほうが良いですね。!
ドメインを取得したい」場合は後述のgetNameメソッドを利用することで取得が可能です。

getParent

次はgetParentメソッドです。

getParentメソッドは現在パスの親のパスを返します。
親を持たないパスの場合NULLが返ってきます。。

path.getParent() != nullnullの場合は親が存在しないので終了します。

getNameCount

次はgetNameCountメソッドです。

getNameCountメソッドは対象のパスに含まれる名前要素の個数を返してくれます。

スラッシュ(/)で区切られた数だけカウントしているようですね。

getName

最後はgetNameメソッドです。

getNameメソッドは引数に渡したインデックス番号の名前要素を返してくれます。

先ほど、getRootメソッドでは取得出来なかったドメイン名は、インデックス番号1で指定することで取得する事が出来そうですね。

ちなみに、存在しないインデックス番号を指定すると以下のようなjava.lang.IllegalArgumentExceptionエラーが発生します。

オススメの参考書

徹底攻略 Java SE 8 Silver

Java8問題集 理解を深める500問

終わりに

以上のように、Java標準Pathクラスを利用する事でURLパス操作を簡単に行う事が出来ました。

正規表現を使うより、可読性や保守性が上がるので是非Pathクラスを利用してみてください♪

336×280




336×280




CATEGORIES & TAGS

IT, , , , , , , , ,

blogenist

Author: blogenist

お名前.comサイドバー