放課後プログラミング

調べたことや考えたことなどを忘れないために書きます。

ファイルパス文字列から拡張子を取得する

private String getExtension(String path) throws StringIndexOutOfBoundsException{
    int idx = path.lastIndexOf(".");
    return path.substring(idx).substring(1);
}

ミソは

path.substring(idx + 1);

としないことで、文字列中にピリオドが存在せずlastIndexOf-1を返したときに、分岐を用いずに例外を飛ばすことができる。
以下が分岐を使った例。

private String getExtension(String path) throws StringIndexOutOfBoundsException{
    int idx = path.lastIndexOf(".");
    if(idx == -1){
        throw new StringIndexOutOfBoundsException(idx);
    }
    return path.substring(idx + 1);
}

前者の書き方の方がスマートに見える。
ただしlastIndexOfsubstringの仕様を知らない人には誤解を招きそうでもあるので、状況に合わせて使い分けるのがよいのかもしれない。。