Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Beginning Regular Expressions 2005.pdf
Скачиваний:
95
Добавлен:
17.08.2013
Размер:
25.42 Mб
Скачать

Chapter 25

The appendTail() Method

The appendTail() method is intended for use in conjunction with the appendReplacement() and find() methods. An example of using the appendTail() method was given in the preceding section on the appendReplacement() method.

The end() Method

The end() method can be used with no arguments or with one argument. When used with no arguments, the end() method returns the index (or position), plus one, of the last character matched. When used with one argument, the end() method takes an int argument that represents a group captured in the regular expression. The index, plus one, of the last character in the matched group is returned.

When used with zero or one arguments, the end() method can throw an IllegalStateException if no match has been attempted or if the most recent attempt at matching failed. When used with one argument, the end() method can throw an IndexOutOfBoundsException if the int argument does not correspond to a captured group.

The find() Method

The find() method attempts to match the next substring of the test string. If a match is found, the boolean value true is returned. If no (further) match is found, the boolean value false is returned. If the match succeeds, additional information about the match is available via the start(), end(), and group() methods.

The find() method can be used with zero or one arguments. When used with no argument, matching starts at the beginning of the test string, or if a previous match has been found, it starts at the character immediately following the final character of the preceding match.

When used with one argument, which is an int value representing an index at which matching should start, the Matcher object is reset, and the index is calculated from the beginning of the test string. The find() method can throw an IndexOutOfBoundsException if the int value is greater than the length of the test string.

The group() Method

The group() method can be used with no argument or one argument. When used with no argument, the group() method returns the match found by the preceding matching operation. The value returned is a String. In principle, the group() method can return the empty string if the pattern specifies characters or metacharacters that are all optional. The group() method can throw an IllegalStateException if matching has not yet been attempted or the preceding attempt at matching failed.

When used with one argument, the group() method takes an int argument, indicating a group captured in the preceding attempt at matching. It returns the matching substring captured by the correspondingly numbered group. It can throw an IllegalStateException if matching has not yet been attempted or if the preceding attempt at matching failed. It can throw an IndexOutOfBoundsException if the int value supplied as the method’s argument does not correspond with a capturing group.

638

Regular Expressions in Java

The groupCount() Method

The groupCount() method takes no argument and returns an int value. The value returned represents the number of capturing groups in the regular expression, excluding group zero, which represents the whole match.

The lookingAt() Method

The lookingAt() method attempts to find a match in the test string for a regular expression pattern. Matching begins at the beginning of the test string. The lookingAt() method takes no argument. If a match is found, further information about the match can be accessed by using the Matcher object’s start(), end(), and group() methods. The lookingAt() method returns a boolean value of true if any character sequence in the test string matches the regular expression pattern.

The following example attempts to match a name entered at the command line against a pattern that looks for a word followed by a comma, followed by one or more space characters, followed by another word. That pattern is used to match a name entered in the format LastName, FirstName.

Try It Out

The lookingAt() Method

1.Type the following code in a text editor:

import java.util.regex.*;

public class lookingAt{

public static void main(String args[]){ isMatchPresent(args[0]);

} // end main()

public static boolean isMatchPresent(String testString){ boolean testResult = false;

String LastNameFirstName = “\\w+,\\s+\\w+”;

Pattern myPattern = Pattern.compile(LastNameFirstName); Matcher myMatcher = myPattern.matcher(testString); testResult = myMatcher.lookingAt();

String matchIs = myMatcher.group();

System.out.println(“The test string is: “ + testString); System.out.println(“It is “ + testString.length() + “ characters long.”);

if (testResult){

System.out.println(“There was a match: “ + myMatcher.group() ); System.out.println(“It started at: “ + myMatcher.start() ); System.out.println(“It ended at: “ + myMatcher.end() );

}

else

{

System.out.println(“No match was found.”);

}

return testResult;

} // end isMatchPresent()

}

639

Chapter 25

2.Save the code as lookingAt.java; compile it; and at the command line, type javac lookingAt.java.

3.Run the code. At the command line, type java lookingAt “Smith, John”. Be sure to insert a space character after the comma, or you will receive an error message.

4.Inspect the displayed results; then run the code again.

5.At the command line, type java lookingAt “Smith, John James”, and inspect the results, as shown in Figure 25-6. Notice that the results after Step 4 are also displayed in the upper part of the figure.

Figure 25-6

How It Works

This example captures and processes a string argument input from the command line. The main() method, as always, accepts an array of String objects. However, the code inside the main() method takes the first of those string arguments, args[0], as the argument to the isMatchPresent() method:

public static void main(String args[]){ isMatchPresent(args[0]);

} // end main()

The isMatchPresent() method makes use of several of the methods of the Matcher class.

The args[0] argument passed to the isMatchPresent() method is referred to as testString inside the isMatchPresent() method, as indicated by the method’s signature:

public static boolean isMatchPresent(String testString){

First, a boolean variable testResult is assigned a default value of false:

boolean testResult = false;

Then the pattern you want to match is assigned to the LastNameFirstName string variable. Notice that the metacharacters \w and \s are written as \\w and \\s:

String LastNameFirstName = “\\w+,\\s+\\w+”;

640

Regular Expressions in Java

The myPattern variable is assigned the pattern created using the Pattern class’s compile() method. Then a Matcher object, myMatcher, is created using the matcher() method of myPattern:

Pattern myPattern = Pattern.compile(LastNameFirstName);

Matcher myMatcher = myPattern.matcher(testString);

The boolean value returned by the lookingAt() method is assigned to the testResult variable (which had previously been assigned the value false. If there is a match, the testResult variable now holds the boolean value of true:

testResult = myMatcher.lookingAt();

The matchIs variable is assigned the value of myMatcher.group(). If there is a match, its value is now assigned to matchIs:

String matchIs = myMatcher.group();

The original string and its length, retrieved using the String class’s length() method, are now displayed. When the argument at the command line is Smith, John, the length is 11 characters. When the argument is Smith, John James, the length is 17 characters:

System.out.println(“The test string is: “ + testString);

System.out.println(“It is “ + testString.length() + “ characters long.”);

An if statement uses the value of the testResult variable to display information about the match. If information about a match is displayed, you know that the lookingAt() method returned the boolean value of true:

if (testResult){

The Matcher class’s group() method causes the match to be displayed. Notice that the match is the same for both command-line arguments — Smith, John and Smith, John James — because the pattern \w+,\s+\w+ will match as far as the final n or John.

System.out.println(“There was a match: “ + myMatcher.group() );

The Matcher class’s start() method returns the position of the first character in the match:

System.out.println(“It started at: “ + myMatcher.start() );

The Matcher class’s end() method returns the position, plus one, of the last characters in the match:

System.out.println(“It ended at: “ + myMatcher.end() );

}

If the value of testResult were false, the following message would be displayed:

else

{

System.out.println(“No match was found.”);

}

return testResult;

641