日曜日, 3月 31, 2013

Commons Lang StringUtils

使うべし

Apache Commons Langの一部であるStringUtilsは極めて便利である.もしこれを存じ上げないのならば,すぐにでも実践投入することをお勧めする.

このユーティリティ,一言でいうならばString関連のニッチを上手く捉えた優れものだ.
例えばisEmptyメソッド.
今までは以下のようなコードがあったと考えられる.


if( str != null && !str.equals( "" )) {
...
}


このコードを見るたびにユニットテストのカバレージを維持する為の儀式的作業またはそれを放棄した場合でのカバレージの低下が頭に浮かんで,気分は萎えるばかりだ.

しかし,StringUtilsのisEmptyメソッドを使えば以下の通り,そのような悩みはもう無用!


if( !StringUtils.isEmpty( str ) ) {
...
}

別のニッチな例としてsplitメソッドがあげられるだろう.これを使えば今までStringTokenizerを使って書いていたコードがスッキリする.joinメソッドも合わせて使えばコードの読みやすさはgroovyのそれに近くなってくる.

サンプルコード

以下のコードではStringUtilsの便利なメソッドを色々と試してみている.
defaultIfEmpty() .. もし文字列が空ならデフォルトバリューとして指示した文字列を返す.プロパティファイルから値を取得した場合値がなかったらデフォルトバリューに変換,とかのケースで使えるだろう.
join() .. スクリプト言語でおなじみ.Iterableの値を区切り文字で区切って連結した文字列を返す
split() .. 指定した区切り文字で与えられた文字列をトークナイズする.返り値は配列.
abbreviate() .. 文字列を指定した文字列長の長さで省略記号(...)を使って省略する.
isEmpty() .. 文字列が null または 空文字 ( "" ) ならばtrue. さもなければfalse.



package test.java;

import static org.junit.Assert.assertThat;
import static org.hamcrest.CoreMatchers.*;

import java.util.ArrayList;

import org.apache.commons.lang3.StringUtils;
import org.junit.Test;

public class StringUtilTest {

@Test
public void testStringUtils() {
// in real use case we may want to do the static import for StringUtils
// try defaultIfEmpty(). Remember first param of assertThat is actual and 2nd expected
assertThat( StringUtils.defaultIfEmpty( "Banana", "N/A" ), is( "Banana") );
assertThat( StringUtils.defaultIfEmpty( "", "N/A" ), is( "N/A" ) );

// try split. It can be an alternative of string tokenizer
for( String fruit: StringUtils.split( "Banana|Orange|Apple", '|' ) ) {
assertThat( fruit, anyOf( containsString( "Banana" ),containsString( "Orange" ), containsString( "Apple" ) ) );
}

// try join
assertThat( StringUtils.join( new ArrayList<String>(){{add("Banana");add("Orange");add("Apple");}}, "," ),  is( "Banana,Orange,Apple" ) );

// try abbreviate
// + 3 means the length of elipses ( "..." )
assertThat( StringUtils.abbreviate( "Tanu Tanuki", "Tanu Tanuki".indexOf( " " ) + 3 ), is( "Tanu..." ) );

// try isEmpty
assertThat( StringUtils.isEmpty( "Notempty."), is( false ) );
assertThat( StringUtils.isEmpty( "" ), is( true ) );
assertThat( StringUtils.isEmpty( null ), is( true ) );

}
}


他にも便利なメソッドが

以上で見てきたように,StringUtilsを一度知れば,これが非常に強力なツールの一つになることは想像できると思う.
上記以外でも大変便利なメソッドがたくさんあるので是非JavaDocを眺めてほしい.




0 件のコメント: