はじめに
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