4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Android / Kotlin】URL から拡張子を取得する

Last updated at Posted at 2021-06-17

はじめに

Android の開発にて
uriの最後の拡張子に応じて処理をハンドリングしたい、という場面がありました。

そのときのコードのメモ

拡張子の例として xxx.html xxx.png xxx.jpg xxx.pdf xxx.zip などがあると思います。

@sdkei さんにご指摘をいただき最後に補足をしております

サンプルのURL

港区役所のサイトURLを利用させていただきました。

今回で言うと、この最後のhtmlの部分を取得したい。

https://www.city.minato.tokyo.jp/shibamadochou/kurashi/todokede/juminhyo.html

パターン1

val url = Uri.parse("https://www.city.minato.tokyo.jp/shibamadochou/kurashi/todokede/juminhyo.html")

val extension1 = url.lastPathSegment?.split(".")?.lastOrNull()
println("extension1: $extension1") // => extension1: html

パターン2

val url = Uri.parse("https://www.city.minato.tokyo.jp/shibamadochou/kurashi/todokede/juminhyo.html")
        
val extension2 = url.lastPathSegment?.let {
    it.substring(it.lastIndexOf(".") + 1)
}
println("extension2: $extension2") // => extension2: html

パターン1の方がスマートにかけている印象

おまけ

Uriクラスがもつpathを取得するメソッドを使うとこんな感じに取得できる。

元となるURL
https://www.city.minato.tokyo.jp/shibamadochou/kurashi/todokede/juminhyo.html
println(url.path) // => /shibamadochou/kurashi/todokede/juminhyo.html
println(url.pathSegments) // => [shibamadochou, kurashi, todokede, juminhyo.html]
println(url.lastPathSegment) // => juminhyo.html

今回はlastPathSegmentを利用

参考

ありがとうございました!!

最後に(補足)

@sdkei さんにご指摘をいただきました!感謝です!

Stringの拡張関数substringAfterLastで簡単に"."以降を取得できる!
便利すぎる…

勉強になりました!!

val urlStr = "https://www.city.minato.tokyo.jp/shibamadochou/kurashi/todokede/juminhyo.html"

val extension3 = urlStr.substringAfterLast(".")
println(extension3) // => html
4
2
2

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
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?