String#replaceFirstの引数は正規表現です
今日の不具合。
String#replaceFirstの機能は「指定された正規表現にマッチする最初の文字列を置換する」です。「指定された文字列と同じ最初の文字列を置換する」わけではありません。
サンプル。
// こういう場合はうまく置換されるけど、 String path = "/aaa/bbb/ccc"; System.out.println( path.replaceFirst( "/aaa/bbb", "/xxx/yyy" ) ); // ()などが入るとうまくいかない。 path = "/aaa/bb(b)/ccc"; System.out.println( path.replaceFirst( "/aaa/bb(b)", "/xxx/yyy" ) ); path = "/aaa/bbb/ccc"; System.out.println( path.replaceFirst( "/aaa/.", "/xxx/yyy" ) );
実行結果です。
/xxx/yyy/ccc /aaa/bb(b)/ccc /xxx/yyybb/ccc
パスの変換で使ってたら、「()を含むパスの変換がうまくいかない」とかいう不具合になってしまった・・・。orz. JavaDocはちゃんと読んでから使いましょう・・・。