# Java: Summary - `java.util.StringBuilder` and `java.util.StringBuffer`

Strings are immutable (can't be changed), so manipulating strings often causes many temporary string objects to be created, which can be quite inefficient. StringBuilder (or StringBuffer) are better choices in these cases. Their `toString()` method can be used get a String value. It isn't necessary to create them with a specific size, it will expand as necessary. Many StringBuilder methods return the same StringBuilder so that the call chaining style of programming can be used.

`StringBuilder` is basically identical to the older `StringBuffer`, but is slightly faster because it isn't synchronized.

Constructors
sb = | new StringBuilder() | Creates empty StringBuilder
sb = | new StringBuilder(n) | Creates empty StringBuilder with initial capacity n.
sb = | new StringBuilder(s) | Creates StringBuilder with value initialized to String s.
Length
i = | sb.length() | Length of the current contents of sb.
Modifying the content - These methods return the original StingBuilder to allow call chaining.
sb = | sb.append(x) | Appends x (char, int, String, ...) to end of sb.
sb = | sb.insert(offset, x) | Inserts x (char, int, String, ...) at position offset.
sb = | sb.setCharAt(index, c) | Replaces char at index with c
sb = | sb.deleteCharAt(i) | Deletes char at index i.
sb = | sb.delete(beg, end) | Deletes chars at index beg thru end.
sb = | sb.reverse() | Reverses the contents.
sb = | sb.replace(beg, end, s) | Replaces characters beg thru end with s.
Getting parts
c = | sb.charAt(i) | char at position i in sb.
s = | sb.substring(i) | substring from index i to the end of sb.
s = | sb.substring(i, j) | substring from index i to BEFORE index j of sb.
Misc
s = | sb.toString() | Returns a String for the contents of sb.
Searching -- Note: All "indexOf" methods return -1 if the string/char is not found
i = | sb.indexOf(s) | index of the first occurrence of String s in s.
i = | sb.indexOf(s, i) | index of String s at or after position i in sb.
i = | sb.lastIndexOf(s) | index of last occurrence of s in sb.
i = | sb.lastIndexOf(s, i) | index of last occurrence of s on or before i in sb.
Comparison (note: use this instead of == and !=)
b = | sb.equals(sb2) | true if the two StringBuilders contain equal values

Copyright 2005 Fred Swartz