The Java String ‘matches’ method

Problem: In a Java program, you want to determine whether a String contains a pattern, and you’d rather use the String matches method than use the Pattern and Matcher classes.

Solution: Use the String matches method, but it’s very important to remember that the regex pattern you define must match the entire string.

A complete String “matches” example

Here’s a complete Java program that shows two patterns that attempt to match a String, including one that does work, and one that intentionally does not work:

/**
 * Demonstrates how to use the String.matches() method, including
 * the need to match the entire string in your patterns.
 */
public class StringMatches1
{
  public static void main(String[] args)
  {
    String stringToSearch = "Four score and seven years ago our fathers ...";
    
    // WRONG: this prints "false", because the search pattern doesn't
    //        match entire string
    System.out.println("Try 1: " + stringToSearch.matches("seven"));
    
    // CORRECT: this prints "true" because the pattern does match the 
    //          entire string 
    System.out.println("Try 2: " + stringToSearch.matches(".*seven.*"));
  }
}

The output from this program is:

Try 1: false
Try 2: true

Discussion

While this example is trivial, it’s intentionally trivial, so I can demonstrate a common problem that developers run into when using the matches method, specifically the need to define a pattern that matches the entire String that you’re trying to test against.

In a more complicated example you might try to look for a pattern like this:

<code>\\S+</code>

But again, you need to make sure you add the extra characters to make sure your pattern matches the entire line.