👨💼
【Koltinケーススタディ】ファイル表現の拡張子を取得したい
いろいろなケース
ファイルシステム上のリソースの場合
Path(java.nio.file)インターフェースで表現することが多いと思っています
kotlinからはkotlinの拡張関数であるPath関数でPathインターフェースの実装クラスを初期化できます。
println(Path("test.html").extension)
println(Path("/lab/pguma/test.html").extension)
Pathインターフェースを使う場合は上記のように拡張プロパティとして定義されたextension
を使うのが一番手っ取り早いかと思います。
ネットワーク上のリソースや生文字列の場合
ネットワーク上のリソースはURIクラスをで表現することが多いと思っています。
こちらは一度文字列に変換した上で扱うのが現段階では一番望ましいと思います。
文字列としてどう扱うか?ですが
前述のextention
プロパティの実装が以下のようになっています。
public val Path.extension: String
get() = fileName?.toString()?.substringAfterLast('.', "") ?: ""
こちらをそのまま拝借させてもらってStringクラスに対する拡張関数として定義しておくと便利かと思います。
extention.file.kt
fun String?.getExtension() = this?.substringAfterLast(".") ?: ""
println(URI.create("http://lab.pguma/on_network.html").toString().getExtension())
println(URI.create("file://lab.pguma/on_local_network.html").toString().getExtension())
println("classpath:string.html".getExtension())
val nullString:String? = null
println(nullString.getExtension())
まとめ
やはり標準APIの実装から学ぶことは多いですね。
実装方法に悩んだ時やよりよい実装を模索したいときは標準APIで同じような機能を担っている実装を参照してみると多くのヒントを得られるとしみじみと感じます。
Discussion