2013年7月9日火曜日

awkでの桁数調整


bash とか使ってて、0埋めして表示桁数を調整したい場合の話。

たとえば、月を表す時に 5 ではなく、05 と表示させたいとき
before=5
after=`echo $before | awk '{printf "%02d", $1}'`
echo $after

結果
05

となる。

Javaで拡張子の置換

Javaで文字列を変換する場合には、 String クラスの

・replaeAll (置換したい文字列, 置き換える文字列)
・replaceFirst(置換したい文字列, 置き換える文字列)

のどちらかを使う。
違いは、最初に一致した部分だけか、一致した全部置換するか。


文字列の置換で一番頻度が高いのは、拡張子を変更する場合だと思う。

たとえば、"abc.dat"を"abc.txt"に変更する場合。
このときは単純に
String before = "abc.dat";
String after = before.replaceFirst("dat", "txt");
もしくは
String after = before.replaceAll("dat", "txt");
で問題ない。
しかし、"abcdat.dat"を"abcdat.txt"に変えたい場合は、上の方法だと
前者は "abctxt.dat"
後者は "abctxt.txt"
になってしまう。

そこで、".dat"を".txt"で置換すればいいが、これらのメソッドでは "."(ドット)は「任意の文字」というワイルドカードを意味してしまうので、エスケープしなければならない。
String before = "abc.dat";
String after = before.replaceFirst("\\.dat", "\\.txt");
もしくは
String after = before.replaceAll("\\.dat", "\\.txt");


ちなみに、indexOf とかではワイルドカード扱いにならないのでエスケープはいらない。