にたまごほうれん草アーカイブ

はてなダイアリーで書いてた「にたまごほうれん草」という日記のアーカイブです。現在は「にたまごほうれん草ブログ」を運営中です。

ファイル名を拡張子とその前に分割

例えば、test.txtにtest_01.txtをつけるために、その前段階として利用します。Javaはあんまり触ったことないのでひょっとしたらもっといい方法があるのかも。
とりあえず、J2SE 1.4以降は正規表現を使えるのでそれで。

import java.util.regex.*;

まずは正規表現クラスのインポート。

使用箇所は以下のような感じで。

String filename = "test.txt";
String name; //拡張子より前の部分
String ext;  //拡張子

Pattern p = Pattern.compile("^(.+)(\\.\\w+)$");
Matcher m = p.matcher(filename);
if (m.find()) {
	name = m.group(1);
	ext = m.group(2);
} else {
	name = filename;
	ext    = "";
}

これで、nameには"test"が、extには".txt"が格納されます。拡張子がない場合はprefixにファイル名がそのまま入ります。
まず、Pattern.compileにより、正規表現を作成します。次に、その正規表現をmatcherの引数に適用し、その結果がMatcherクラスのインスタンスに格納されます。
今回は、後方参照を使うため、適用結果をMatcher#group()によって取り出します。groupの引数は、それぞれ\1,\2などの数字に対応しているようです。