How to use `string.startsWith()` method ignoring the case?

I want to use string.startsWith() method but ignoring the case.

Suppose I have String "Session" and I use startsWith on "sEsSi" then it should return true.

How can I achieve this?


Solution 1:

Use toUpperCase() or toLowerCase() to standardise your string before testing it.

Solution 2:

One option is to convert both of them to either lowercase or uppercase:

"Session".toLowerCase().startsWith("sEsSi".toLowerCase());

This is wrong. See: https://stackoverflow.com/a/15518878/14731


Another option is to use String#regionMatches() method, which takes a boolean argument stating whether to do case-sensitive matching or not. You can use it like this:

String haystack = "Session";
String needle = "sEsSi";
System.out.println(haystack.regionMatches(true, 0, needle, 0, 5));  // true

It checks whether the region of needle from index 0 till length 5 is present in haystack starting from index 0 till length 5 or not. The first argument is true, means it will do case-insensitive matching.


And if only you are a big fan of Regex, you can do something like this:

System.out.println(haystack.matches("(?i)" + Pattern.quote(needle) + ".*"));

(?i) embedded flag is for ignore case matching.

Solution 3:

I know I'm late, but what about using StringUtils.startsWithIgnoreCase() from Apache Commons Lang 3 ?

Example :

StringUtils.startsWithIgnoreCase(string, "start");

Just add the following dependency to your pom.xml file (taking the hypothesis that you use Maven) :

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.11</version>
</dependency>