Lang
このLang APIは「java.lang」パッケージに対する拡張です。私はCommons Langが将来JDKの一部になることを望んでいます。このパッケージにはJavaプロジェクトで使用できるユーティリティメソッドが数多く含まれています(JakartaのWebサイトに包括的なユーザーガイドがあり、javadocには大部分のクラスについて簡単な用法が記載されています)。本稿では特に興味深いクラスだけを紹介します。サンプルのソースファイルは「in.co.narayanan.commons.lang」パッケージに収められています。
StringUtils、WordUtils、StringEscapeUtils、RandomStringUtilsの各クラスには有用な文字列操作メソッドが備わっています。以下のリストでは、これらのメソッドの中でよく使うものを取り上げ、その用法を示します。
次のメソッドは、たとえばJTableセルなどでGUI内の表示領域が制限されている場合に、メッセージの一部だけを表示します。
String message = "Please check the logs for an error.";
message = StringUtils.abbreviate(message, 25);
次のメソッドは、Javaで開発されるデスクトップアプリケーションで非常に役立ちます(たとえば、電子メールを作成して送信する機能が必要なJava Swingアプリケーションなど)。
String message = "jakarta commons";
message = StringUtils.capitalize(message);
次に示すのはWordUtilsクラスからのもので、文字列を大文字にする2種類のメソッドです。
String message = "jakarta commons"; message = WordUtils.capitalize(message); String message = "jakarta COMMONS"; message = WordUtils.capitalizeFully(message);
詳しい用法についてはjavadocを参照してください。
次のメソッドは前後にスペースを入れてメッセージを位置合わせするのに便利です。
String message = "java";
message = StringUtils.center(message, 10);
これまでは文字列処理のためにトークン化のコードを書くことがよくありましたが、Langを使えばその必要はありません。splitメソッドはトークン化の処理を行い、String配列を返してくれます。joinメソッドを使用すると、String配列から新しい文字列を作成できます。
String message = "hello how are you"; String messageTokens[] = StringUtils.split(message, ' '); String newMessage = StringUtils.join(messageTokens, '$');
文字列内でのパスワード表示も、overlayメソッドで簡単に実現できます。replaceメソッドは非常に優秀で、単語を検索して置換する機能も備えています。そのため、文字位置を気にする必要はありません。
String message = "This is a demo for replace and overlay feature"; message = StringUtils.replace(message, "demo", "illustration"); message = "Your password is: somepassword"; message = StringUtils.overlay(message, "*****", 18, message.length());
StringEscapeUtilsクラスには、HTML、Java文字列、JavaScript文字列、SQL、およびXMLをエスケープ/エスケープ解除するためのメソッドがあります。
String html = "<h1>This will be displayed in the <i>HTML</i> page. Hence the <b>tags</b> will be escaped.<h1>"; String escapedHtml = StringEscapeUtils.escapeHtml(html);
次のメソッドではランダムなパスワードを生成できます。
String randomPassword = RandomStringUtils.randomAlphanumeric(8);
System.out.println("Random Password:" + randomPassword);
以降では、各パッケージについて簡単に触れておきます。
org.apache.commons.lang
ArrayUtils、BooleanUtils、CharRange、CharSet、CharUtils、SystemUtils、Validateが注目すべきクラスです。詳細はjavadocを参照してください。
org.apache.commons.lang.builder
クラスCompareToBuilder、EqualsBuilder、HashCodeBuilder、ToStringBuilderは、それぞれメソッドcompareTo、equals、hashCode、toStringを実装するのに役立ちます。これらのクラスは、ほぼすべてのJavaプロジェクトで必要になります。
org.apache.commons.lang.enums
Java 1.5では列挙型がサポートされています。したがって、このパッケージが役に立つのはJDK 1.5より前のプロジェクトです。このパッケージのjavadocには使用例が掲載されています。
org.apache.commons.lang.exception
NestableExceptionクラスは例外の原因をリンクするためのサポートを提供します。すべての例外についてスタックトレースができると、エラーの根本原因をすばやく突き止めるのに役立ちます。これは特にJDK 1.4より前のプロジェクトで有用です。JDK 1.4以降には、ネストした例外のサポートが備わっています。
org.apache.commons.lang.math
IntRange、Fraction、NumberUtils、RandomUtilsが注目すべきクラスです。詳細はjavadocを参照してください。
org.apache.commons.lang.mutable
java.langパッケージ内の基本型のラッパーは不変ですが、このパッケージに含まれているラッパークラスは可変です。詳細はjavadocを参照してください。
org.apache.commons.lang.time
DateUtils、DataFormatUtils、FastDateFormat、StopWatchなどのクラスが有用です。詳細はjavadocを参照してください。
まとめ
Jakarta Commonsについて紹介するシリーズ第1回では、次のことを取り上げました。
- Commonsのさまざまなコンポーネントが提供する豊富な機能
- ユーティリティクラスの特定のコンポーネントやメソッドの具体的な用途
- さまざまなAPIで使われているデザインパターン
- さまざまなAPIのパッケージとクラスの概要
これからJavaアプリケーションをデザインしたり開発したりするときには、有用なクラスを選んで適切に使用できるのではないでしょうか。このシリーズの第2回と第3回では、さらに興味深いコンポーネントについて解説します。最後までお付き合いいただけば、あなたもJakarta Commonsコンポーネントの大部分のクラスをJDKの一部にすべきだと確信するでしょう。
