Apache Commons Lang 3.1 の StrBuilder の使い方メモ。
説明
StringBuilder, StringBuffer より柔軟でパワフルな文字列生成クラス。
StringBuilder と同じで スレッドセーフではない 。
使い方
基本
import org.apache.commons.lang3.text.StrBuilder;
public class Main {
public static void main(String[] args) throws Exception {
StrBuilder sb = new StrBuilder();
sb.append("a").append("b").append("c");
System.out.println(sb);
}
}
abc
基本的な使い方は StringBuilder/StringBuffer と同じ。
isEmpty()
import org.apache.commons.lang3.text.StrBuilder;
public class Main {
public static void main(String[] args) throws Exception {
StrBuilder sb = new StrBuilder();
System.out.println(sb.isEmpty());
sb.append("a").append("b").append("c");
System.out.println(sb.isEmpty());
}
}
true
false
isEmpty()
メソッドで文字列が空かどうか分かる。
clear()
import org.apache.commons.lang3.text.StrBuilder;
public class Main {
public static void main(String[] args) throws Exception {
StrBuilder sb = new StrBuilder(1);
System.out.println("初期キャパシティ:" + sb.capacity());
sb.append("a").append("b").append("c");
System.out.println("文字列追加後のキャパシティ:" + sb.capacity());
sb.clear();
System.out.println("clear()後のキャパシティ:" + sb.capacity());
System.out.println("sb.isEmpty() = " + sb.isEmpty());
sb.minimizeCapacity();
System.out.println("minimize後のキャパシティ:" + sb.capacity());
}
}
初期キャパシティ:1
文字列追加後のキャパシティ:4
clear()後のキャパシティ:4
sb.isEmpty() = true
minimize後のキャパシティ:0
clear()
メソッドで今まで追加していた文字列を全て削除できる。
ただし、内部で保持している文字バッファのサイズは依然として確保されたままになる。
文字バッファのサイズを減らしたい場合は minimizeCapacity()
メソッドを実行する。
appendln()
import org.apache.commons.lang3.text.StrBuilder;
public class Main {
public static void main(String[] args) throws Exception {
StrBuilder sb = new StrBuilder();
sb.appendln("a")
.append("b").append("c");
System.out.println(sb);
}
}
a
bc
appendln()
メソッドを使えば、追加した文字の後ろに勝手に改行コードを付けてくれる。これは地味にありがたい。
改行コードだけ追加したい場合は、 appendNewLine()
を使う。
appendAll()とappendWithSeparators()
import java.util.Arrays;
import java.util.List;
import org.apache.commons.lang3.text.StrBuilder;
public class Main {
public static void main(String[] args) throws Exception {
StrBuilder sb = new StrBuilder();
List<Integer> list = Arrays.asList(1, 2, 3, 4);
sb.appendAll(list);
System.out.println(sb);
sb.clear();
sb.appendWithSeparators(list, ",");
System.out.println(sb);
}
}
1234
1,2,3,4
appendAll()
で引数に指定した List や配列の中身を全て追加してくれる。
appendWithSeparators()
なら第二引数で指定した区切り文字を要素の間に挿入してくれる。
appendSeparator()
import java.util.Arrays;
import java.util.List;
import org.apache.commons.lang3.text.StrBuilder;
public class Main {
public static void main(String[] args) throws Exception {
StrBuilder sb = new StrBuilder();
List<Integer> list = Arrays.asList(1, 2, 3, 4);
for (int i : list) {
sb.appendSeparator(",");
sb.append(i);
}
System.out.println(sb);
}
}
1,2,3,4
StrBuilder が 空文字でない ときに appendSeparator()
を使うと、引数で指定した文字が追加される。
つまり、上記のようにループの最初で appendSeparator()
を使うようにすれば、自然と区切り文字を挿入することができるようになる。
appendFixedWidthPadLeft()とappendFixedWidthPadRight()
import org.apache.commons.lang3.text.StrBuilder;
public class Main {
public static void main(String[] args) throws Exception {
StrBuilder sb = new StrBuilder();
sb.appendln("123")
.appendFixedWidthPadLeft("a", 3, '*').appendNewLine()
.appendFixedWidthPadLeft("ab", 3, '*').appendNewLine()
.appendFixedWidthPadLeft("abc", 3, '*').appendNewLine()
.appendFixedWidthPadLeft("abcd", 3, '*').appendNewLine();
System.out.println(sb);
sb.clear();
sb.appendln("123")
.appendFixedWidthPadRight("a", 3, '*').appendNewLine()
.appendFixedWidthPadRight("ab", 3, '*').appendNewLine()
.appendFixedWidthPadRight("abc", 3, '*').appendNewLine()
.appendFixedWidthPadRight("abcd", 3, '*').appendNewLine();
System.out.println(sb);
}
}
123
**a
*ab
abc
bcd
123
a**
ab*
abc
abc
appendFixedWidthPadLeft()
は、文字を追加した後に左から固定幅で文字を埋め込む。
追加した文字が固定幅より大きい場合は、左から順に文字が切り捨てられていく。
appendFixedWidthPadRight()
は左右を逆にした動きになる。
appendPadding()
import org.apache.commons.lang3.text.StrBuilder;
public class Main {
public static void main(String[] args) throws Exception {
StrBuilder sb = new StrBuilder();
sb.append("a").appendPadding(5, '*').append("b");
System.out.println(sb);
}
}
a*****b
appendPadding()
で指定した文字を、指定した数だけ追加できる。
setNullText()
import org.apache.commons.lang3.text.StrBuilder;
public class Main {
public static void main(String[] args) throws Exception {
String nullText = null;
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(nullText);
System.out.println("StringBuilder に null を append した場合 > " + stringBuilder);
StrBuilder strBuilder = new StrBuilder();
strBuilder.append(nullText);
System.out.println("StrBuilder に null を append した場合 > " + strBuilder);
strBuilder.setNullText("NULL");
strBuilder.append(nullText);
System.out.println("setNullText() を指定した後 > " + strBuilder);
}
}
StringBuilder に null を append した場合 > null
StrBuilder に null を append した場合 >
setNullText() を指定した後 > NULL
StringBuilder に null を append した場合、 "null" という文字列が追加されるが、
StrBuilder はデフォルトでは null を append すると空文字が追加される。
null を append したときに追加される文字は setNullText()
で変更できる。