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

IT

投稿日: 2019年1月9日
最終更新日:

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

ねこじゃすり

created by Rinker
PEPPY(ペピイ)
¥3,850 (2024/04/03 21:33:13時点 Amazon調べ-詳細)

猫を魅了する魔法の装備品!

【最新機種】GoPro hero11 Black

created by Rinker
GoPro(ゴープロ)
¥62,000 (2024/04/03 21:42:08時点 Amazon調べ-詳細)

最新機種でVlogの思い出を撮影しよう!

ペヤング ソースやきそば 120g×18個

created by Rinker
ペヤング
¥2,600 (2024/04/03 21:42:16時点 Amazon調べ-詳細)

とりあえず保存食として買っておけば間違いなし!

モンスターエナジー 355ml×24本 [エナジードリンク]

created by Rinker
モンスター
¥4,748 (2024/04/03 21:33:15時点 Amazon調べ-詳細)

脳を活性化させるにはこれ!

ドラゴンクエスト メタリックモンスターズギャラリー メタルキング

created by Rinker
スクウェア・エニックス(SQUARE ENIX)
¥3,250 (2024/04/03 21:42:09時点 Amazon調べ-詳細)

みんな大好き経験値の塊をデスクに常備しておこう!

BANDAI SPIRITS ULTIMAGEAR 遊戯王 千年パズル 1/1スケール

created by Rinker
BANDAI SPIRITS(バンダイ スピリッツ)
¥7,500 (2024/04/03 21:42:14時点 Amazon調べ-詳細)

もう一人の僕を呼び覚ませ!!

MOFT X 【新型 ミニマム版】 iPhone対応 スマホスタンド

created by Rinker
MOFT
¥2,880 (2024/04/03 21:42:18時点 Amazon調べ-詳細)

Amazon一番人気のスマホスタンド!カード類も収納出来てかさ張らないのでオススメです!

スポンサーリンク

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標準Pathクラスを利用する事でURLパス操作を簡単に行う事が出来ました。

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

336×280




336×280




CATEGORIES & TAGS

IT, , , , , , , , ,

blogenist

Author: blogenist

関連記事

YouTubeも見てね♪

お名前.comサイドバー