KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > net > sf > jga > fn > string > Match


1 // ============================================================================
2
// $Id: Match.java,v 1.8 2006/01/08 00:52:25 davidahall Exp $
3
// Copyright (c) 2003-2005 David A. Hall
4
// ============================================================================
5
// The contents of this file are subject to the Common Development and
6
// Distribution License (CDDL), Version 1.0 (the License); you may not use this
7
// file except in compliance with the License. You should have received a copy
8
// of the the License along with this file: if not, a copy of the License is
9
// available from Sun Microsystems, Inc.
10
//
11
// http://www.sun.com/cddl/cddl.html
12
//
13
// From time to time, the license steward (initially Sun Microsystems, Inc.) may
14
// publish revised and/or new versions of the License. You may not use,
15
// distribute, or otherwise make this file available under subsequent versions
16
// of the License.
17
//
18
// Alternatively, the contents of this file may be used under the terms of the
19
// GNU Lesser General Public License Version 2.1 or later (the "LGPL"), in which
20
// case the provisions of the LGPL are applicable instead of those above. If you
21
// wish to allow use of your version of this file only under the terms of the
22
// LGPL, and not to allow others to use your version of this file under the
23
// terms of the CDDL, indicate your decision by deleting the provisions above
24
// and replace them with the notice and other provisions required by the LGPL.
25
// If you do not delete the provisions above, a recipient may use your version
26
// of this file under the terms of either the CDDL or the LGPL.
27
//
28
// This library is distributed in the hope that it will be useful,
29
// but WITHOUT ANY WARRANTY; without even the implied warranty of
30
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
31
// ============================================================================
32
package net.sf.jga.fn.string;
33
34 import java.util.regex.Pattern JavaDoc;
35 import net.sf.jga.fn.UnaryPredicate;
36
37 /**
38  * Unary Functor that tests a string argument against a given regular
39  * expression. The expression is not presumed to be anchored: if any part of
40  * the input string matches the regular expression, then the result will be
41  * true.
42  * <p>
43  * Copyright &copy; 2003-2005 David A. Hall
44  *
45  * @author <a HREF="mailto:davidahall@users.sf.net">David A. Hall</a>
46  */

47
48 public class Match extends UnaryPredicate<String JavaDoc> {
49     
50     static final long serialVersionUID = 4842042451096017684L;
51
52     // The regular expression to be matched (in String form for convenience
53
// at construction and for reporting)
54
private String JavaDoc _regex;
55
56     // The regular expression to be matched (in Pattern form for execution)
57
private Pattern JavaDoc _pattern;
58
59     /**
60      * Builds a Match with an empty string pattern
61      */

62     public Match () { this(""); }
63     
64     /**
65      * Builds a Match with a given regular expression
66      */

67     public Match (String JavaDoc regex){
68         _regex = (regex != null) ? regex : "";
69         _pattern = Pattern.compile(_regex);
70     }
71
72     /**
73      * Builds a Match with a given Pattern
74      */

75     public Match (Pattern JavaDoc pattern) {
76         _pattern = pattern;
77         _regex = pattern.pattern();
78     }
79
80     /**
81      * Returns the format object used to present values in formatted form.
82      * @return the format used to present values
83      */

84     
85     public String JavaDoc getRegex() {
86         return _regex;
87     }
88     
89     // UnaryPredicate interface
90

91     /**
92      * Tests a string against the regular expression given at construction
93      * <p>
94      * @param arg the value to tested
95      * @return true if the string matches the regular expression given at
96      * construction
97      */

98
99     public Boolean JavaDoc fn(String JavaDoc arg) {
100         if (arg == null)
101             throw new NullPointerException JavaDoc();
102
103         return _pattern.matcher(arg).find();
104     }
105     
106     /**
107      * Calls the Visitor's <code>visit(Match)</code> method, if it
108      * implements the nested Visitor interface.
109      */

110     public void accept(net.sf.jga.fn.Visitor v) {
111         if (v instanceof Match.Visitor)
112             ((Match.Visitor)v).visit(this);
113         else
114             v.visit(this);
115     }
116
117     // Object overrides
118

119     public String JavaDoc toString() {
120         return "Match("+_regex+")";
121     }
122     
123     // Acyclic Visitor
124

125     /**
126      * Interface for classes that may interpret a <b>Match</b>
127      * predicate.
128      */

129     public interface Visitor extends net.sf.jga.fn.Visitor {
130         public void visit(Match host);
131     }
132 }
133
Popular Tags