« tomcatのソースやバグ情報をチェック | メイン | WindowsマシンにTracの環境を構築してみる --- その1 »

Jakarta Commons で効率よいプログラミング - Commons Lang 編

プログラミングの中でStringをあれやこれやこねくり回すシーンは良くあります。

文字を分割したり、トリムしたり、固定長にしたり。

そんなとき、自前でUtilクラスを作る前に、Jakarta Commons Langを利用してみましょう。

便利なメソッドが揃っていて、プログラミング効率は格段にアップするはずです(知っている人は知っている話なので、そんな人は読み飛ばしてください)。

ダウンロードはこちら↓から。

The Jakarta Site - Commons Lang Downloads

数あるクラス/メソッドの中から、今回はベーシックなStringUtilsクラスの split()、substringBefore()、substringAfter()、substring()を紹介します。

ということで、

String test = "hoge=1&moge=2";

のようなパラメータっぽい文字列を処理するときを想定してみます。

こういうときは、"="の前と後ろをそれぞれkeyとvalueに対応させてMapに格納していくのが定石なので、そのように処理してみます。

String test = "hoge=1&moge=2";
Map result = new HashMap();
String[] l = StringUtils.split(test, "&");
for (int i = 0; i < l.length; i++) {
result.put(StringUtils.substringBefore(l[i], "="), StringUtils.substringAfter(l[i], "="));
}

3行目のsplit()で、文字列を"&"で分割し、Stringの配列を取得します。

その後、配列の長さ分だけfor文を回して、配列に格納された"key=value"の文字列を処理してきます。

今度はその"key=value"を"="の前と後ろで分けて値を取得するのですが、ここでsubstringBefore()とsubstringAfter()を利用します。

これで、hogeの値を取得したいときは、

result.get("hoge");

で取得できます。簡単ですよね。

これをStringクラスのsubstring()を使って実装しようとすると、結構面倒です。文字列長を誤ると、StringIndexOutOfBoundsExceptionなんかも発生しやすかったりするので、バグも発生しやすいです。

ちなみに、StringUtilsクラスのsubstring()メソッドは、この文字列長の扱いが割とゆるやかで、

String test = "abcdefg";

このような文字列の4文字目から20文字目を取得しようとしたとき、

test.substring(4,20);

だと、StringIndexOutOfBoundsExceptionが発生しますが、

StringUtils.substring(test,4,20);

だと、"defg"が取得できます。

初心者Javaプログラマが一歩ステップアップするために、このようなAPIを積極的に利用するようにしましょう。


Jakarta Commons クックブック―Javaプロジェクト必須のレシピ集
ティモシー・M. オブライエン Timothy M. O’Brien 長瀬 嘉秀 テクノロジックアート
オライリージャパン
売り上げランキング: 39496

コメント (2)

障害があったときとか、commonsのソースを追ったりするけど、
(こないだfileuploadのソース読んでました)
JavaDocが日本語だったらな~とか思ったりします。

が、ソースコードだけで、スラッスラ読んで、
"へー、なるほどねー"とか言ってる人をみると、
まだまだ修行が全然足りんなぁと、、、、

思い始めて2年くらい経ってしまいました。。。。orz

commonsもそうだし、tomcatもそうだけど、「当たり前」で使っている部分にバグがありそうと思ったとき、ソースを追って調べられるのって重要だよね。
俺もソースだけですらすら読んでってわけにはいかないなぁ。