プログラミングの中で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を積極的に利用するようにしましょう。
オライリージャパン
売り上げランキング: 39496

コメント (2)
障害があったときとか、commonsのソースを追ったりするけど、
(こないだfileuploadのソース読んでました)
JavaDocが日本語だったらな~とか思ったりします。
が、ソースコードだけで、スラッスラ読んで、
"へー、なるほどねー"とか言ってる人をみると、
まだまだ修行が全然足りんなぁと、、、、
思い始めて2年くらい経ってしまいました。。。。orz
Posted by: しのはらです。 | 2007年2月 7日 21:41
commonsもそうだし、tomcatもそうだけど、「当たり前」で使っている部分にバグがありそうと思ったとき、ソースを追って調べられるのって重要だよね。
俺もソースだけですらすら読んでってわけにはいかないなぁ。
Posted by: Chris | 2007年2月 8日 00:01