Key Points
- The Java
String contains()
method checks if a string includes a specific sequence of characters, returningtrue
if found andfalse
otherwise. - It is case-sensitive and accepts any
CharSequence
, likeString
orStringBuilder
. - Passing
null
throws aNullPointerException
, and empty strings always returntrue
. - Research suggests it’s efficient for most uses, internally using
indexOf()
for the search.
Introduction
The contains()
method is a useful tool in Java for determining whether a string contains a particular substring. This guide will explain how it works, its syntax, and provide examples to illustrate its usage, including some unexpected behaviors like handling empty strings.
Syntax and Parameters
The method has a simple syntax:
- Signature:
public boolean contains(CharSequence s)
- Parameter:
s
is the sequence to search for, which can be aString
,StringBuilder
, or anyCharSequence
implementation. - Return Value: Returns
true
if the sequence is found,false
otherwise. - Exception: Throws
NullPointerException
ifs
isnull
.
Examples and Usage
Here are some practical examples to demonstrate its functionality:
- Basic Check:
String str = "Hello, World!";
boolean result = str.contains("World");
System.out.println(result); // Outputs: true
This shows a simple case where “World” is found in the string.
- Case Sensitivity:
String str = "Hello, World!";
boolean result = str.contains("world");
System.out.println(result); // Outputs: false
Here, the lowercase “world” is not found due to case sensitivity.
- Null Handling:
String str = "Hello, World!";
try {
boolean result = str.contains(null);
} catch (NullPointerException e) {
System.out.println("Cannot pass null to contains()"); // This will be printed
}
Attempting to pass null
results in an exception, as expected.
- Empty String:
String str = "Hello, World!";
boolean result1 = str.contains("");
System.out.println(result1); // Outputs: true
String emptyStr = "";
boolean result2 = emptyStr.contains("");
System.out.println(result2); // Outputs: true
An unexpected detail is that any string, including an empty one, contains the empty string, always returning true
.
Survey Note: Comprehensive Analysis of Java String contains() Method
Overview and Purpose
The contains()
method, part of Java’s String
class, is designed to determine whether a given string includes a specified sequence of characters. Introduced in Java 1.5, it is a fundamental utility for string manipulation, widely used in tasks such as input validation, text searching, and data filtering. This method is particularly valuable in programming scenarios where substring presence needs to be verified, such as checking for keywords or validating user input.
Method Details
The method’s signature is public boolean contains(CharSequence s)
, where s
represents the sequence to search for. The CharSequence
interface is implemented by classes like String
, StringBuilder
, and StringBuffer
, allowing flexibility in the type of input. The method returns a boolean value: true
if the sequence is found within the string, and false
otherwise. It is important to note that contains()
throws a NullPointerException
if the parameter s
is null
, ensuring robust error handling.
Internally, the method leverages the indexOf()
method to perform the search, returning true
if indexOf(s) >= 0
, indicating the substring’s presence. This implementation suggests efficiency for most use cases, though for very large strings or frequent searches, performance considerations might warrant alternative approaches like regular expressions.
Syntax and Parameters
- Signature:
public boolean contains(CharSequence s)
- Parameters:
s
: The sequence of characters to search for, which can be anyCharSequence
implementation.- Return Value:
true
if the string contains the specified sequence.false
if the sequence is not found.- Exceptions:
NullPointerException
ifs
isnull
.- Since: Java 1.5, ensuring broad compatibility across modern Java versions.
Examples and Use Cases
To illustrate the method’s functionality, consider the following examples, which cover basic usage, edge cases, and practical applications:
Basic Usage
String str = "Hello, World!";
boolean result = str.contains("World");
System.out.println(result); // Outputs: true
This example demonstrates a straightforward check where “World” is found in the string, returning true
.
Case Sensitivity
String str = "Hello, World!";
boolean result = str.contains("world");
System.out.println(result); // Outputs: false
The method is case-sensitive, so “world” in lowercase is not found in “Hello, World!”, highlighting the need for case-aware handling in searches.
Handling Null Values
String str = "Hello, World!";
try {
boolean result = str.contains(null);
} catch (NullPointerException e) {
System.out.println("Cannot pass null to contains()"); // This will be printed
}
Passing null
to contains()
results in a NullPointerException
, emphasizing the importance of null checks before invoking the method.
Using with Other CharSequence Implementations
String str = "Hello, World!";
StringBuilder sb = new StringBuilder("World");
boolean result = str.contains(sb);
System.out.println(result); // Outputs: true
This example shows that contains()
can accept StringBuilder
instances, leveraging the CharSequence
interface for flexibility.
Edge Cases
Empty String
String str = "Hello, World!";
boolean result1 = str.contains("");
System.out.println(result1); // Outputs: true
String emptyStr = "";
boolean result2 = emptyStr.contains("");
System.out.println(result2); // Outputs: true
An interesting and often unexpected behavior is that any string, including an empty one, contains the empty string, always returning true
. This is because the empty string is considered a subset of any string, aligning with logical string theory.
String Containing Itself
String str = "Hello, World!";
boolean result = str.contains("Hello, World!");
System.out.println(result); // Outputs: true
A string always contains itself, which is intuitive but worth noting for completeness.
Non-Existent Substring
String str = "Hello, World!";
boolean result = str.contains("Universe");
System.out.println(result); // Outputs: false
If the substring is not found, the method returns false
, as expected.
Unicode Support
Java strings are Unicode-aware, and contains()
handles international characters seamlessly:
String str = "Hello, 世界!";
boolean result = str.contains("世界");
System.out.println(result); // Outputs: true
This ensures the method is suitable for applications involving internationalized text.
Case-Insensitive Search
For scenarios requiring case-insensitive searches, developers can convert both the string and the search sequence to the same case:
String str = "Hello, World!";
String search = "world";
boolean result = str.toLowerCase().contains(search.toLowerCase());
System.out.println(result); // Outputs: true
This approach, while not part of contains()
itself, extends its utility for case-insensitive comparisons.
Common Use Cases
The contains()
method is commonly employed in:
- Input Validation: Checking if user input contains specific keywords or patterns.
- Text Searching: Searching for substrings in large texts, such as log files or documents.
- Data Filtering: Filtering datasets based on string content, such as filtering records containing certain terms.
For performance-critical applications, especially with large strings or frequent searches, developers might consider alternatives like regular expressions (Pattern
and Matcher
classes) or more advanced string searching algorithms, though these are beyond the scope of basic usage.
Performance Considerations
Given that contains()
uses indexOf()
, which typically employs efficient string searching algorithms (often linear time complexity O(n+m) where n is the string length and m is the substring length), it is generally efficient for most use cases. However, for very large strings or frequent calls, profiling may be necessary to ensure optimal performance.
Conclusion
The contains()
method is a versatile and efficient tool for checking substring presence in Java strings. Its case-sensitive nature, support for CharSequence
, and handling of edge cases like empty strings and null values make it a robust choice for string manipulation tasks. By understanding its behavior and leveraging examples, developers can effectively utilize this method in their Java applications, ensuring reliable and efficient string operations.
Key Citations
- Java SE 11 Documentation String Class
- GeeksforGeeks Java String contains() Method with Example
- Baeldung Java String.contains()
- Stack Overflow String.contains in Java
More