こんにちは!エンジニアの中沢です。
Javaには文字列がnullの場合でもNullPointerExceptionの例外が発生しないようにするための、「StringUtilsクラス」があります。
StringUtilsクラスは「Apache Commons Lang」のライブラリを使う必要があるので、上手く活用してください。
この記事では、
- StringUtilsとは
- 文字列を調べる方法
という基本的な内容から、
- 空白や特定の文字を削除する方法
- 文字列を置換や追加する方法
- 文字列の分割や結合をする
などの応用的な使い方に関しても解説していきます。今回はこれらの方法を覚えるために、「StringUtilsクラス」の使い方をわかりやすく解説します!
なお、Javaの記事については、こちらにまとめています。
StringUtilsとは
StringUtilsクラスは、文字列がnullの場合でもNullPointerExceptionの例外が発生しないように作られています。そのため、文字列がnullの場合に例外を回避するコードを書く手間を省くことができます!
StringUtilsクラスは「Apache Commons Lang」のライブラリに含まれているため、使用するにはライブラリをダウンロードしてプロジェクトに追加する必要があります。
ライブラリのダウンロードページはこちらです。
http://commons.apache.org/proper/commons-lang/download_lang.cgi
また、ライブラリを使うには次のようなimport文が必要です。
import org.apache.commons.lang3.StringUtils;
nullの処理以外は標準APIと同じ動作をするため、この記事では文字列がnullの場合の動作を中心に解説します。
文字列を調べる方法
文字列がnullか空か空白か調べる(isEmpty/isBlank)
文字列がnullか空か空白かを調べるにはisEmptyメソッドとisBlankメソッドを使います。
次の例でisEmptyとisBlankの動作を確認してみましょう。
StringUtils.isEmpty(null); // true StringUtils.isEmpty(""); // true StringUtils.isEmpty(" "); // false StringUtils.isBlank(null); // true StringUtils.isBlank(""); // true StringUtils.isBlank(" "); // true
文字列がnullの場合でも、isEmptyとisBlankは例外を発生させずに”true”を返しているのが確認できます!
文字列を比較する(equals/compare)
文字列を比較するにはequalsメソッドとcompareメソッドを使います。
StringUtils.equals(null, null); // true StringUtils.equals(null, "a"); // false StringUtils.compare(null, null); // 0 StringUtils.compare(null , "a"); // -1 StringUtils.compare("a", null); // 1
文字列がnullの場合でも比較ができていることが確認できます!
指定した文字列があるか調べる(indexOf/contains)
指定した文字列があるか調べるにはindexOfメソッドとcontainsメソッドを使います・
StringUtils.indexOf(null, "a"); // -1 StringUtils.indexOf("abc", "b"); // 1 StringUtils.contains(null, "a"); // false StringUtils.contains("abc", "a"); // true
indexOfメソッドのように戻り値がint型の場合は、文字列がnullのときに”-1”を返します。
アルファベットか数字か空白か全角か判定する(isAlpha/isNumeric/isWhitespace/isAsciiPrintable)
アルファベットや全角、半角などの文字を判定するには、isAlphaメソッド、isNumericメソッド、isWhitespaceメソッド、isAsciiPrintableメソッドを使います。
StringUtils.isAlpha(null); // false StringUtils.isAlpha("abc"); // true StringUtils.isNumeric(null); // false StringUtils.isNumeric("123"); // true StringUtils.isWhitespace(null); // false StringUtils.isWhitespace(""); // true StringUtils.isWhitespace(" "); // true StringUtils.isAsciiPrintable(null); // false StringUtils.isAsciiPrintable("samurai"); // true StringUtils.isAsciiPrintable("さむらい"); // false
StringUtilsを使うと文字の判定も簡単に行うことができます。
空白や特定の文字を削除する方法
空白や制御文字を削除する(trim/strip)
空白や改行コードなどの制御文字を削除するにはtrimメソッドとstripメソッドを使います。
StringUtils.trim(null); // null StringUtils.trim("samurai\n"); // “samurai” StringUtils.strip(null); // null StringUtils.strip(" abc "); // “abc”
文字列の先頭と末尾の空白や改行コードが削除できました!
指定した文字を削除する(remove)
指定した文字を削除するにはremoveメソッドを使います。
StringUtils.remove(null, "a"); // null StringUtils.remove("samurai", "a"); // “smuri”
このように文字を指定して削除することができました!
文字列を置換や追加する方法
指定した文字を置換する(replace)
指定した文字を置換するにはreplaceメソッドを使います。
StringUtils.replace(null, "a", "b"); // null StringUtils.replace("samurai", "a", "b"); // “sbmurbi”
このように文字列の置換ができました!
文字列がnullのときに空の文字列に変える(defaultString)
文字列がnullのときに空の文字列を返したい場合にはdefaultStringメソッドを使います。
StringUtils.defaultString(null); // “” StringUtils.defaultString(""); // “”
このようにnullを空の文字列に変えることができました!
文字列を追加する(leftPad/repeat)
文字列の先頭に指定した桁数になるように文字列を追加するには、leftPadメソッドを使います。
StringUtils.leftPad(null, 1); // null StringUtils.leftPad("a", 3); // " a" StringUtils.leftPad("a", 3, "b"); //”bba”
同じ文字列を繰り返し追加する場合はrepeatメソッドを使います。
StringUtils.repeat(null, 3); // null StringUtils.repeat("abc", 3); // “abcabcabc”
このように文字列の追加ができました!
文字列の分割や結合をする
文字列を分割する(split)
文字列を空白や指定した文字で分割するにはsplitメソッドを使います。
StringUtils.split(null); // null StringUtils.split("samu rai"); // ["samu", "rai"] StringUtils.split("samu,rai", ","); // ["samu", "rai"]
このように文字列の分割ができました!
文字列を結合する(join)
文字列を空白や指定した文字で結合するにはjoinメソッドを使います。
StringUtils.join(null); // null StringUtils.join(["a", "b", "c"]); // "abc" StringUtils.join(["a", "b", "c"], ':'); // "a:b:c"
このように文字列の結合ができました!
他にはどんなメソッドがあるの?
ここでは紹介しきれなかったメソッドはこちらの公式ドキュメントで確認できます。
https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html
String(文字列)クラス総まとめ
String(文字列)クラスについてさらに詳しく知りたいときはこちらの記事を確認してください!
まとめ
いかがでしたか?
今回はStringUtilsの使い方について解説しました。文字列がnullの場合の例外処理をする必要がなくなり、便利なのでぜひ活用してくださいね。
もし文字列がnullのときの例外処理が面倒だと思ったらこの記事を確認してください!