This post is about the OCAJP exam objective “Manipulate data using the StringBuilder class and its methods“. You will be tested in the exam about various methods and syntax related to the StringBuilder class. Here we would explain about the StringBuilder class and important methods. If you have any questions, please write it in the comments section.
StringBuilder Class
- String Builder was added to Java in 1.5 version. We had StringBuffer class before StringBuilder class.
- The class StringBuilder is defined in the package java.lang and it has a mutable sequence of characters.
- StringBuilder is a final class , so it is not possible to create sub classes for it. You can use StringBuilder methods , but you can’t override.
- StringBuilder implements two intefaces such as CharSequence, Serializable.
- Unlike StringBuilder, the String class has an immutable sequence of characters. Every time you modify a string that’s represented by the String class, your code actually creates new String objects instead of modifying the existing one.
- You must use class StringBuilder when you’re dealing with larger strings or modifying the contents of a string often. Doing so will improve the performance of your code.
When to use StringBuilder Class?
The exact difference between StringBuilder and StringBuffer class is that StringBuilder is not thread safe where StringBuffer is thread safe. It is highly recommended to use the StringBuilder class instead of using the StringBuffer class.
Here is some of the points about the StringBuilder class.
- StringBuilder class methods are exactly same as StringBuffer class methods, except that StringBuilder is not thread safe.
- In other words its methods are not synchronized.
- Oracle recommends you that you use StringBuilder instead of StringBuffer whenever possible, because StringBuilder will run faster.
- Instances of StringBuilder are not safe for use by multiple threads. If such synchronization is required then it is recommended that StringBuffer be used.
Real World Scenario
We prefer String Builder when you are working with files that are large, ever changing streams of input are being handled by the program.In these cases large blocks of characters are handled as units, String Builder object are the great way to handle a block of data , pass it on and then reuse the same memory to handle next block of data.
Creating StringBuilder Objects
The StringBuilder class has four overloaded constructors.
- StringBuilder( )
- StringBuilder( CharSequence seq)
- StringBuilder(int capacity)
- StringBuilder(String str)
Let’s use these constructors in a sample program.
class StringBuilderObjects { public static void main(String args[]) { StringBuilder sb1 = new StringBuilder(); // 1 StringBuilder sb2 = new StringBuilder(sb1); // 2 StringBuilder sb3 = new StringBuilder(10); // 3 StringBuilder sb4 = new StringBuilder("Hi"); // 4 } }
Line 1 creates StringBuilder object with no characters in it and an initial capacity of 16 characters.
How StringBuilder capacity increases ?
Line 1 creates StringBuilder object with no characters in it and an initial capacity of 16 characters. After you add 17th character to StringBuilder object , it’s capacity will be increased to 34 . The formula used by the StringBuilder to increase its capacity.
newCapacity = (intialcapacity * 2) + 2.
- Line 2 creates a StringBuilder object that contains the same set of characters as contained by the StringBuilder object passed to it.
- Line 3 creates a StringBuilder object with no characters and an initial capacity of 10 characters.
- Line 4 creates a StringBuilder object with an initial value as contained by the String object.
StringBuilder Class Methods
String Builder contains methods. Most of the methods works as like String methods, for example methods such as charAt, indexOf, lastIndexOf, substring and length.
append( )
- The append method adds the specified value at the end of the existing value of a StringBuilder object and returns reference to the the same StringBuilder object .
- Because you may want to add data from multiple data types to a StringBuilder object, this method has been overloaded so that it can accept data of any type.
This method accepts all primitives(char, int, long,float,double,boolean), String, char array, and Object as method parameters.
class StringBuilderDemo { public static void main(String args[]) { StringBuilder sb = new StringBuilder(); StringBuilder sb1 = new StringBuilder(); StringBuilder sb2 = new StringBuilder(); sb.append(5); // appends int value sb.append(false); // appends boolean value sb.append('a'); // appends char value sb.append(10.5f); // appends float value sb.append(10.5); // appends double value sb.append("Hi"); // appends String object sb1.append(sb); // appends StringBuilder object sb2.append(sb, 1, 4);// appends characters from index 1 to 3 ( because 4 is exclusive). System.out.println(sb); // prints 5falsea10.510.5Hi System.out.println(sb1); // prints 5falsea10.510.5Hi System.out.println(sb2); // prints fa1 } }
Note : sb2.append(sb, 1, 4) This method throws IndexOutOfBoundsException if you give invalid values.
- You can append a complete char array, or its subset as follows:
StringBuilder sb = new StringBuilder();
char[] name1 = { 'O', 'c', 'a', 'j', 'p' };
char[] name2 = { 'J', 'a', 'v', 'a', '8' };
sb.append(name1);
sb.append(name2, 1, 3);
System.out.println(sb); // prints Ocajpava
sb.append(name1);
It appends all characters to the StringBuilder object.
sb.append(name2, 1, 3);
Pay attention to this method. Here
1 – starting position in the array.
3 – How many characters to add to array after starting position.
It throws IndexOutOfBoundsException according to Java doc if you give wrong index values. But In practice it throws ArrayIndexOutOfBoundsException.
- Because the method append also accepts a method parameter of type Object, you can pass it any object from the Java API or your own user-defined object:
Example :
public class StringBuilderDemo {
public static void main(String[] args) {
StringBuilder sb1 = new StringBuilder();
sb1.append("Java");
sb1.append(new Student("Oracle"));
System.out.println(sb1); // prints Javacom.mss.Student@58d25a40
}
}
class Student {
String name;Student(String str) { name = str; }
}
Insert( )
- The insert method adds the specified value at the specified position of the existing value of a StringBuilder object returns reference to the same StringBuilder object . It throws StringIndexOutOfBoundsException, if you pass invalid index value.
- It is also overloaded method.
- Because you may want to add data from multiple data types to a StringBuilder object, this method has been overloaded so that it can accept data of any type.
- This method accepts all primitives(char, int, long,float,double,boolean), String, char array, and Object as method
- The main difference between the append and insert methods is that the insert method enables you to insert the requested data at a particular position, but the append method only allows you to add the requested data at the end of the StringBuilder object
public class StringBuilderDemo {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("IamJavaDevelopernow");
StringBuilder sb1 = new StringBuilder();
StringBuilder sb2 = new StringBuilder();
sb.insert(2, 5); // inserts 5 literal at position 2
sb.insert(4,false); // inserts false literal at position 4
sb.insert(6,'a'); // inserts 'a' literal at position 6
sb.insert(7,10.5f); // inserts 10.5 literal at position 7
sb.insert(8,10.5); //inserts 10.5 literal at position 8
sb.insert(9,"Hi"); // inserts String object at position 9
sb1.insert(0,sb); // inserts StringBuilder object at position 0
sb2.insert(0,sb, 1, 4);// inserts characters of sb from index 1 to 3 (because 4 is exclusive) to sb2 at position 0.
System.out.println(sb);//prints Ia5mfaa11Hi0.50.5lseJavaDevelopernow
System.out.println(sb1);//prints Ia5mfaa11Hi0.50.5lseJavaDevelopernow
System.out.println(sb2); // prints a5m
}
}
- You can inserts a complete char array, or its subset as follows:
StringBuilder sb = new StringBuilder("HiHello");
char[] name1 = { 'O', 'c', 'a', 'j', 'p' };
char[] name2 = { 'J', 'a', 'v', 'a', '8' };
sb.insert(2,name1);
sb.insert(4,name2, 1, 3);
System.out.println(sb);// prints HiOcavaajpHello
sb.insert(2,name1);
inserts all characters of names1 array to sb starting from position 2
sb.insert(4,name2, 1, 3);
Pay attention to this method. Here
1 – starting position in the array.
3 – How many characters to add to sb after starting position.
4- starting position in sb to insert array elements.
- Because the method append also accepts a method parameter of type Object, you can pass it any object from the Java API or your own user-defined object:
Example :
public class StringBuilderDemo { public static void main(String[] args) { StringBuilder sb1 = new StringBuilder("HiHello"); sb1.insert(2,"Java");// inserts String object at position 2 sb1.insert(4,new Student("Oracle"));inserts Student object at position 4 System.out.println(sb1);//prints HiJacom.mss.Student@58d25a40vaHello } } class Student { String name; Student(String str) { name = str; } }
charAt( ), setCharAt( )
public char charAt(int index)
- charAt method takes index value as argument , it returns the the particular character at the specified index value.
- If you pass invalid index value it throws IndexOutOfBoundsException . But in practice it throws StringIndexOutOfBoundsException.
public void setCharAt(int index, char ch)
- setCharAr method replaces the character at the specified index in the object. It returns nothing.
- If you pass invalid index value it throws IndexOutOfBoundsException . But in practice it throws StringIndexOutOfBoundsException.
Example :
public class StringBuilderDemo { public static void main(String[] args) { StringBuilder sb = new StringBuilder("Hello"); char c = sb.charAt(1); sb.setCharAt(0, 'N'); System.out.println(c); // prints e System.out.println(sb); // prints Nello } }
reverse(), toString() , replace public StringBuilder reverse()
- Reverse method reverses the character sequence present in StringBuilder object and returns reference to the same object.
public String toString()
- toString method converts StringBuilder object into String object.
public StringBuilder replace(int start, int end, String str)
- Replaces the characters in a substring of this sequence with characters in the specified String. The substring begins at the specified start and extends to the character at index end – 1 or to the end of the sequence if no such character exists. First the characters in the substring are removed and then the specified String is inserted at start. (This sequence will be lengthened to accommodate the specified String if necessary.)
- It throws StringIndexOutOfBoundsException if you give in valid index values.
public class StringBuilderDemo { public static void main(String[] args) { StringBuilder sb = new StringBuilder("Hello"); sb.replace(1, 4, "ABC"); System.out.println(sb); // prints HABCo StringBuilder sb1 = sb.reverse(); String s = sb.toString(); System.out.println(sb); // prints oCBAH System.out.println(sb == sb1); // prints true because both sb , sb1 referencing to the same object. System.out.println(s);// prints oCBAH } }
Delete, DeleteCharAt
public StringBuilder delete(int start, int end)
- Delete methods removes characters from start position to end-1 position.
- It throws StringIndexOutOfBoundsException if you give in valid index values.
public StringBuilder deleteCharAt(int index)
- Removes the character at the specified index.
- It throws StringIndexOutOfBoundsException if you give in valid index value.
public class StringBuilderDemo {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("HelloHi");
sb.delete(2, 4);
sb.deleteCharAt(0);
System.out.println(sb); // prints eoHi
}
}
Capacity, ensureCapacity, length,setLength, trimToSize
public int capacity()
- Returns the current capacity. The capacity is the amount of storage available for newly inserted characters, beyond which an allocation will occur.
public void ensureCapacity(int minimumCapacity)
- Ensures that the capacity is at least equal to the specified minimum. If the current capacity is less than the argument, then a new internal array is allocated with greater capacity. The new capacity is the larger of:
- The minimumCapacity argument.
- Twice the old capacity, plus 2.
public void trimToSize()
- Attempts to reduce storage used for the character sequence. If the buffer is larger than necessary to hold its current sequence of characters, then it may be resized to become more space efficient.
public int length()
- Returns the number of characters in the particular object .
public void setLength(int newLength)
- Sets the length of the character sequence. The sequence is changed to a new character sequence whose length is specified by the argument.
- It throws IndexOutOfBoundsException, if the newLength argument is negative.
public class StringBuilderDemo { public static void main(String[] args) { StringBuilder sb = new StringBuilder(); sb.append("OCAJP8"); System.out.println(sb.capacity());// prints 16 because StringBuilder default capacity 16. System.out.println(sb.length());// prints 6 because we appended 6 character sequence sb.ensureCapacity(20); // It increases the capacity, doesn't changes length of character sequence System.out.println(sb.capacity()); // prints 34 because capacity increases System.out.println(sb.length());// prints 6 sb.setLength(8);// It increases the length of character sequence, doesn't changes capacity System.out.println(sb.capacity()); // prints 34 System.out.println(sb.length()); // prints 8 sb.trimToSize(); // It decreases the capacity to length of character sequence, but doesn't changes length of character sequence System.out.println(sb.capacity()); // prints 8 System.out.println(sb.length()); // prints 8 } }
getChars, indexOf, lastIndexOf , subSequence, subString
public void getChars(int srcBegin, int srcEnd,char[] dst, int dstBegin)
- Characters are copied from srcBegin to srcEnd-1 from the StringBuilder object into the destination character array dst starting at
- It throws IndexOutOfBoundsException according to Java Doc.
- But in practice , if srcBegin or srcEnd or both invalid values , It throws StringIndexOutOfBoundsException. If dstBegin is invalid value It throws ArrayIndexOutOfBoundsException.
Example
public class StringBuilderDemo {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
sb.append("OCAJP8");
char[] ch = new char[5] ;
sb.getChars(0, 2, ch, 0);
System.out.println(Arrays.toString(ch)); // prints [O,C, , ]
}
}
public int indexOf(String str)
- It looks for first match.If the string argument occurs as a substring within this object, then the index of the first character of the first such substring is returned; if it does not occur as a substring, -1 is returned.
- public int indexOf(String str, int fromIndex)
- It looks for first match.If the string argument occurs as a substring within this object starting at the specified index , then the index of the first character of the first such substring is returned; if it does not occur as a substring, -1 is returned.
public class StringBuilderDemo { public static void main(String[] args) { StringBuilder sb = new StringBuilder(); sb.append("OCAJPA8J"); System.out.println(sb.indexOf("A")); // prints 2 System.out.println(sb.indexOf("Z")); // prints -1 System.out.println(sb.indexOf("J",4)); // prints 7 } }
public int lastIndexOf(String str)
- It looks for last match.If the string argument occurs as a substring within this object, then the index of the first character of the first such substring is returned; if it does not occur as a substring, -1 is returned.
Example :
public class StringBuilderDemo { public static void main(String[] args) { StringBuilder sb = new StringBuilder(); sb.append("OCAJPA8J"); System.out.println(sb.indexOf("A")); // prints 2 System.out.println(sb.lastIndexOf("A")); // prints 5 System.out.println(sb.lastIndexOf("Z")); // prints -1 } }
public String substring(int start)
- Returns a new String that contains a subsequence of characters currently contained in this character sequence. The substring begins at the specified index and extends to the end of this sequence.
- It throws StringIndexOutOfBoundsException if start is invalid value.
public String substring(int start, int end)
- Returns a new String that contains a subsequence of characters currently contained in this sequence. The substring begins at the specified start and extends to the character at index end – 1.
- It throws StringIndexOutOfBoundsException if start or end or both invalid
public CharSequence subSequence(int start, int end)
- Returns a new character sequence that is a subsequence of this sequence starting from start to end-1.
- It throws StringIndexOutOfBoundsException if start or end or both invalid .
- The difference between substring , subSequence is return types are different.
Both the returns reference to String object.
Example :
public class StringBuilderDemo { public static void main(String[] args) { StringBuilder sb = new StringBuilder(); sb.append("OCAJPA8J"); System.out.println(sb.substring(2)); // prints AJPA8J System.out.println(sb.substring(2,5)); // prints AJP CharSequence c = sb.subSequence(2, 5); System.out.println(c); // prints AJP System.out.println(c instanceof String); // prints true System.out.println(c instanceof StringBuilder); // prints false } }
OCAJP Tips
The following are the methods that are very important for the OCAJP exam preparation:
- public StringBuilder append(String s)
- public StringBuilder delete(int start, int end)
- public StringBuilder insert(int offset, String s)
- public StringBuilder reverse()
- public String toString()
The exam may test your knowledge on difference between String and StringBuilder objects. You have to understand the clear difference between the String class and StringBuilder class.
You can try our free test for OCAJP Mock Exams. If you have any questions, please write it in the comments section.
- Top 45 Fresher Java Interview Questions - March 9, 2023
- 25 Free Practice Questions – GCP Certified Professional Cloud Architect - December 3, 2021
- 30 Free Questions – Google Cloud Certified Digital Leader Certification Exam - November 24, 2021
- 4 Types of Google Cloud Support Options for You - November 23, 2021
- APACHE STORM (2.2.0) – A Complete Guide - November 22, 2021
- Data Mining Vs Big Data – Find out the Best Differences - November 18, 2021
- Understanding MapReduce in Hadoop – Know how to get started - November 15, 2021
- What is Data Visualization? - October 22, 2021
StringBuilder is used when we want to modify Java strings in-place. Many Thanks for sharing this , keep sharing.
Incredible topic explanation.