Java is one of the most widely used programming languages, known for its versatility and robustness. One of its fundamental features is string manipulation, which is crucial for handling text data. Among the many string operations available, the substring method is an essential tool for extracting portions of a string. This article will explore Java’s substring method in depth, covering its syntax, usage, performance considerations, and practical applications.
1. What is a Substring?
A substring is a sequence of characters derived from another string. For example, in the string "Hello, World!", the substrings "Hello", "World", and "lo, Wo" are all valid substrings. Java provides built-in methods to extract these substrings efficiently.
2. Java Substring Method: Syntax and Usage
Java’s String class provides two overloaded substring methods:
substring(int beginIndex)– Extracts a substring from the specifiedbeginIndexto the end of the string.substring(int beginIndex, int endIndex)– Extracts a substring starting atbeginIndexand ending atendIndex - 1.
2.1 Using substring(int beginIndex)
This method extracts a substring from the given index to the end of the string.
public class SubstringExample {
public static void main(String[] args) {
String str = "Java Programming";
String sub = str.substring(5);
System.out.println(sub); // Output: Programming
}
}Here, substring(5) extracts "Programming" because it starts at index 5 and goes to the end.
2.2 Using substring(int beginIndex, int endIndex)
This method extracts a substring from beginIndex up to endIndex - 1.
public class SubstringExample {
public static void main(String[] args) {
String str = "Java Programming";
String sub = str.substring(0, 4);
System.out.println(sub); // Output: Java
}
}Here, substring(0, 4) extracts characters from the index 0 to 3, giving "Java".
3. Important Points to Remember
- Indexing starts at 0 — The first character of a string has an index of
0. - The end index is exclusive — The character at
endIndexis not included in the substring. - Throws
StringIndexOutOfBoundsException– IfbeginIndexis negative, greater thanendIndex, or ifendIndexexceeds the string length. - Time Complexity — The
substringmethod runs in O(n) time complexity wherenis the length of the extracted substring.
4. Best Practices of substring Method
4.1 Extracting a File Extension
public class FileExtensionExtractor {
public static void main(String[] args) {
String filename = "document.pdf";
String extension = filename.substring(filename.lastIndexOf(".") + 1);
System.out.println(extension); // Output: pdf
}
}This example extracts "pdf" by finding the last occurrence of "." and taking the substring from that position.
4.2 Getting a Domain Name from a URL
public class URLExtractor {
public static void main(String[] args) {
String url = "https://www.example.com";
String domain = url.substring(url.indexOf("//") + 2, url.lastIndexOf("."));
System.out.println(domain); // Output: www.example
}
}This extracts "www.example" by locating "//" and "." in the URL.
4.3 Extracting a First Name from a Full Name
public class NameExtractor {
public static void main(String[] args) {
String fullName = "John Doe";
String firstName = fullName.substring(0, fullName.indexOf(" "));
System.out.println(firstName); // Output: John
}
}This extracts "John" by finding the first space and taking the substring before it.
5. Performance of substring Method
5.1 Memory Efficiency
Before Java 7 update 6, substring used the original string’s character array, leading to memory leaks. Since Java 7, it has created a new character array, preventing memory issues and increasing memory usage.
Exception Handling in Java Substring Method
1. Common Exceptions in the Java Substring Method
When using substring()Two significant exceptions can occur:
1.1 StringIndexOutOfBoundsException
This happens when an invalid index is passed to substring().
Possible Causes:
beginIndexIs negative or more significant thanendIndex.endIndexExceeds the string length.
Example of StringIndexOutOfBoundsException
public class SubstringErrorExample {
public static void main(String[] args) {
String str = "Hello";
// Invalid index: start index is greater than string length
System.out.println(str.substring(10)); // Throws StringIndexOutOfBoundsException
}
}Output:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 10
1.2 NullPointerException
Occurs when calling substring() on a null string.
Example of NullPointerException
public class NullSubstringExample {
public static void main(String[] args) {
String str = null;
// Calling substring on null string
System.out.println(str.substring(1, 3)); // Throws NullPointerException
}
}Output:
Exception in thread "main" java.lang.NullPointerException
2. How to Handle Substring Exceptions in Java
To prevent crashes and improve reliability, handle these exceptions using:
2.1 Try-Catch Block
A try-catch block prevents the program from crashing when an exception occurs.
Example: Handling StringIndexOutOfBoundsException
public class HandleSubstringException {
public static void main(String[] args) {
try {
String str = "Java";
String sub = str.substring(0, 10); // Invalid index
System.out.println(sub);
} catch (StringIndexOutOfBoundsException e) {
System.out.println("Invalid substring range: " + e.getMessage());
}
}
}Output:
Invalid substring range: String index out of range: 10
Example: Handling NullPointerException
public class HandleNullPointer {
public static void main(String[] args) {
try {
String str = null;
System.out.println(str.substring(0, 2));
} catch (NullPointerException e) {
System.out.println("Cannot extract substring from a null string.");
}
}
}Output:
Cannot extract substring from a null string.
2.2 Using Defensive Programming
Defensive programming helps prevent exceptions before they occur.
2.2.1 Check for Null Before Calling substring()
public class SafeSubstring {
public static void main(String[] args) {
String str = null;
if (str != null) {
System.out.println(str.substring(0, 3));
} else {
System.out.println("String is null, cannot extract substring.");
}
}
}Output:
String is null, cannot extract substring.
2.2.2 Validate Index Range Before Calling substring()
public class SafeSubstringRange {
public static void main(String[] args) {
String str = "Hello";
int startIndex = 2;
int endIndex = 10; // Out of range
if (startIndex >= 0 && endIndex <= str.length() && startIndex < endIndex) {
System.out.println(str.substring(startIndex, endIndex));
} else {
System.out.println("Invalid substring indexes.");
}
}
}Output:
Invalid substring indexes.
3. Alternative: Apache Commons Lang for Safer Substrings
Apache Commons Lang provides a safer way to handle substrings.
Using StringUtils.substring() from Apache Commons Lang
import org.apache.commons.lang3.StringUtils;
public class ApacheSafeSubstring {
public static void main(String[] args) {
String str = null;
// StringUtils.substring() returns empty string for null inputs
String result = StringUtils.substring(str, 0, 3);
System.out.println("Substring: " + result); // Output: ""
}
}Advantages:
- Does not throw
NullPointerExceptiononnullstrings. - Automatically adjusts indexes if out of bounds.
Finally
The substring method in Java is a powerful tool for string manipulation, allowing efficient extraction of portions of a string. Developers can use it effectively in real-world applications by understanding its syntax, edge cases, and performance implications. However, careful consideration should be given to handling exceptions and performance overhead in large-scale applications.
This article was originally published on Medium.



