Problem: In a Java program, you want to determine whether a String contains a pattern, you want your search to be case-insensitive, and you want to use String matches
method than use the Pattern and Matcher classes.
Solution: Use the String matches
method, and include the magic (?i:X)
syntax to make your search case-insensitive. (Also, remember that when you use the matches
method, your regex pattern must match the entire string.)
Here's the source code for a complete Java program that demonstrates this case-insensitive pattern matching technique:
/** * Demonstrates how to perform a case-insensitive pattern * match using String and the String.matches() method. */ public class StringMatchesCaseInsensitive { public static void main(String[] args) { String stringToSearch = "Four score and seven years ago our fathers ..."; // this won't work because the pattern is in upper-case System.out.println("Try 1: " + stringToSearch.matches(".*SEVEN.*")); // the magic (?i:X) syntax makes this search case-insensitive, so it returns true System.out.println("Try 2: " + stringToSearch.matches("(?i:.*SEVEN.*)")); } }
The output from this program is:
Try 1: false Try 2: true
Discussion
This is a trivial example that you could solve using other techniques, but when you have a more complex pattern that you're trying to find, this "magic" case-insensitive syntax can come in handy.
For more information on this syntax see the Pattern javadoc page on Sun's web site.