当メモは2018-06-18に投稿されたものを加筆修正し、再掲したものです。
目次
概要
昔はInitialize-On-Demand Holderとかを使っていましたが、
最近はenum
でサクっとシングルトンは作ってしまっています。
以下に文字列ユーティリティクラスの例を載せておきます。
実装例
基本的には、唯一の要素であるINSTANCE
を持つようなenum
を作成して、あとはpublic
メソッドを普通に作成していくだけです。
簡単だし楽ですね。
StringUtility.java
package jp.fumokmm; import java.util.Objects; public enum StringUtility { INSTANCE; /** * <p>指定の文字列をトリムします。 * 指定の文字列がnullの場合は空文字が返却されます。</p> * @param str トリムする文字列 * @return トリム後の文字列 */ public String trim(String str) { return Objects.nonNull(str) ? str.trim() : ""; } /** * <p>指定の文字列をトリム(全角スペース含む)します。 * 指定の文字列がnullの場合は空文字が返却されます。</p> * @param str トリムする文字列 * @return トリム後の文字列 */ public String trimFull(String str) { if (Objects.isNull(str)) return ""; int len = str.length(); int st = 0; char[] val = str.toCharArray(); while (st < len && (val[st] <= ' ' || val[st] == ' ')) { st++; } while (st < len && (val[len - 1] <= ' ' || val[len - 1] == ' ')) { len--; } return (st > 0 || len < str.length()) ? str.substring(st, len) : str; } }
利用例
StringUtilityTest.java
package jp.fumokmm; import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.*; import org.junit.Test; public class StringUtilityTest { @Test public void testTrim() { StringUtility util = StringUtility.INSTANCE; assertThat(util.trim(null), is("")); assertThat(util.trim(" "), is("")); assertThat(util.trim(" a "), is("a")); assertThat("全角スペース入りはトリムされない", util.trim(" a "), is(" a ")); } @Test public void testTrimFull() { StringUtility util = StringUtility.INSTANCE; assertThat(util.trimFull(null), is("")); assertThat(util.trimFull(" "), is("")); assertThat(util.trimFull(" a "), is("a")); assertThat("全角スペース入りもトリムされる", util.trimFull(" a "), is("a")); } }
ちなみ
ちなみに上記テストでは、
StringUtility util = StringUtility.INSTANCE;
StringUtility.INSTANCE.trim(str);
可読性を見極めてご利用下さい。