One of the most common tasks in Java or any other programming language is to check whether a string contains another string or not. Java provides multiple ways to accomplish this task. You can use contains()
, indexOf()
, lastIndexOf()
, startsWith()
, and endsWith()
methods to check if one string contains, starts or ends with another string in Java or not.
In this article, you'll learn about six different ways of checking if a string contains a substring in Java. Let us start with the first commonly used method — contains()
.
1. String.contains()
Method
The first and most popular method used in Java for checking if a string contains another string is contains()
from the String
class. This method returns a boolean value based on whether the substring exists in the this string or not.
The contains()
method searches the substring across the original string and returns true
if and only if this string contains the specified sequence of character values, and false
otherwise. Here is an example:
String str = "Java is a server-side programming language.";
str.contains("Java"); // true
str.contains("Node.js"); // false
It is important to remember that the contains()
method is case-sensitive which means it treats uppercase and lowercase characters differently as shown in the below example:
"Hey, there!".contains("There"); // false
"Java 101".contains("java"); // false
For a case-insensitive search, you should convert both string and substring to lowercase as shown below:
String str = "My name is Atta!";
// case-insensitive search
str.toLowerCase().contains("ATTA".toLowerCase()); // true
Since contains()
returns a boolean value, it means that you can use it directly in if statements as shown below:
String str = "My name is Atta!";
if(str.contains("Atta")) {
System.out.println("Hey Atta 👋");
} else {
System.out.println("Hey!");
}
// Hey Atta 👋
The contains()
method throws a NullPointerException
if the given substring is null
. Another interesting thing to note is that contains()
internally calls the indexOf()
method (explains below) to check if the given sequence of character exists or not.
2. String.indexOf()
Method
The indexOf()
method is different than the contains()
method in a way that it doesn't return a boolean value. Instead, this method returns the index of the first occurrence of the substring. If the string does not contain the given substring, it simply returns -1
.
Ideally, you should use the indexOf()
method to** find the index of a character** in a string. But it can also be used for substrings matching. Since contains()
is implemented using the indexOf()
method, they are essentially the same. It doesn't make any impact on the performance whichever method you use except that the former is more readable than the latter.
Her is an example that shows how to use the indexOf()
method in Java:
String str = "Apple, Orange, & Mango are Fruits.";
str.indexOf("Apple"); // 0 (true)
str.indexOf("Mango"); // 17 (true)
str.indexOf("Banana"); // -1 (false)
Similar to contains()
, the indexOf()
method is also case-sensitive which means that you have to convert both strings to lowercase before performing a case-insensitive search as shown below:
String str = "iPhone X";
str.indexOf("x"); // -1 (false)
str.toLowerCase().indexOf("I".toLowerCase()); // 0 (true)
3. String.lastIndexOf()
Method
The lastIndexOf()
method is similar to indexOf()
except that it returns the index of the last occurrence of the substring. It starts the search from the tail and returns -1
if substring not found in the string or the last position of the substring.
Here is an example that demonstrates how you can use the lastIndexOf()
method to check if a string contains another substring:
String str = "iPhone X, iPhone XL";
str.lastIndexOf("iPhone"); // 10 (true)
str.lastIndexOf("Apple"); // -1 (false)
4. String.startsWith()
Method
The startsWith()
method can also be used for a more specific use-case where you want to check if a string starts with a given substring. This method returns a boolean value true
if this string begins with the specified string, otherwise false
.
The following example shows how you can use the startsWith()
method to check if a string starts with the specified prefix string:
String str = "Java 101";
str.startsWith("Java"); // true
str.startsWith("101"); // false
Just like the other String
class methods we have discussed above, startsWith()
is also case-sensitive. So you have to lowercase both strings to perform a case-insensitive search as shown below:
String str = "Java 101";
str.startsWith("java"); // false
str.toLowerCase().startsWith("java".toLowerCase()); // true
5. String.endsWith()
Method
As the name suggests, the endsWith()
method is an opposite of startsWith()
that returns true
if and only if the string ends with a specified suffix string, and false
otherwise. Here is an example:
String str = "Spring Boot & MySql";
str.endsWith("MySql"); // true
str.endsWith("Boot"); // false
endsWith()
is also case-sensitive which means you need to convert both string and substring to lowercase of case-insensitive search:
String str = "Spring Boot & MySql";
str.endsWith("mysql"); // false
str.toLowerCase().endsWith("mysql".toLowerCase()); // true
6. String.matches()
Method
Finally, let us look at another way of checking if a string contains a given substring by using the matches()
method from the String
class. Unlike other methods we discussed above, matches()
accepts a regular expression as a parameter and searches the string for a match. If it finds the matches, it returns true
, and false
if no match is found.
Here is an example that demonstrates how you can use the matches()
method to check if a string contains another substring or not:
String str = "MEAN Stack stands for MongoDB, Express, Angular, and Node";
// start with
str.matches("(?i)mean.*"); // true
// ends with
str.matches("(?i).*node"); // true
// anywhere
str.matches("(?i).*mongo.*"); // true
Here is a good article to learn more about regular expression in Java.
Conclusion
That's all folks. In this article, we have discussed various ways to check if a string contains another string in Java. You can use any of the methods above depending on your needs.
It is recommended to use indexOf()
or lastIndexOf()
methods only if you need the index of substring. Otherwise contains()
is more readable and returns a boolean value which can be used in if statements directly.
✌️ Like this article? Follow me on Twitter and LinkedIn. You can also subscribe to RSS Feed.