KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > streamInputExample


1 /* ====================================================================
2  * The Apache Software License, Version 1.1
3  *
4  * Copyright (c) 2000 The Apache Software Foundation. All rights
5  * reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  *
11  * 1. Redistributions of source code must retain the above copyright
12  * notice, this list of conditions and the following disclaimer.
13  *
14  * 2. Redistributions in binary form must reproduce the above copyright
15  * notice, this list of conditions and the following disclaimer in
16  * the documentation and/or other materials provided with the
17  * distribution.
18  *
19  * 3. The end-user documentation included with the redistribution,
20  * if any, must include the following acknowledgment:
21  * "This product includes software developed by the
22  * Apache Software Foundation (http://www.apache.org/)."
23  * Alternately, this acknowledgment may appear in the software itself,
24  * if and wherever such third-party acknowledgments normally appear.
25  *
26  * 4. The names "Apache" and "Apache Software Foundation", "Jakarta-Oro"
27  * must not be used to endorse or promote products derived from this
28  * software without prior written permission. For written
29  * permission, please contact apache@apache.org.
30  *
31  * 5. Products derived from this software may not be called "Apache"
32  * or "Jakarta-Oro", nor may "Apache" or "Jakarta-Oro" appear in their
33  * name, without prior written permission of the Apache Software Foundation.
34  *
35  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
36  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
37  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
38  * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
39  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
40  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
41  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
42  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
43  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
44  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
45  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
46  * SUCH DAMAGE.
47  * ====================================================================
48  *
49  * This software consists of voluntary contributions made by many
50  * individuals on behalf of the Apache Software Foundation. For more
51  * information on the Apache Software Foundation, please see
52  * <http://www.apache.org/>.
53  *
54  * Portions of this software are based upon software originally written
55  * by Daniel F. Savarese. We appreciate his contributions.
56  */

57
58 import java.io.*;
59 import org.apache.oro.text.regex.*;
60 import org.apache.oro.text.awk.*;
61
62 /**
63  * This is a test program demonstrating how to search an input stream
64  * with the AwkTools regular expression classes.
65  *
66  @author <a HREF="dfs@savarese.org">Daniel F. Savarese</a>
67  @version $Id: streamInputExample.java,v 1.1.1.1 2000/07/23 23:08:48 jon Exp $
68  */

69 public final class streamInputExample {
70
71   /**
72    * This program extracts sentences containing the word C++ from
73    * the sample file streamInputExample.txt The regular expression
74    * used is not perfect, so focus on AwkStreamInput and not the
75    * ability of the regular expression to handle all normal sentences.
76    * For those not familiar with the OROMatcher Util class, a use of
77    * the Util.substitute method is included.
78    */

79   public static final void main(String JavaDoc args[]) {
80
81     // A regular expression to extract sentences containing the word C++.
82
// We assume sentences can only end in . ! ? and start with a word
83
// character \w
84
String JavaDoc regex = "(\\w[^\\.?!]*C\\+\\+|C\\+\\+)[^\\.?!]*[\\.?!]";
85     String JavaDoc sentence;
86     AwkMatcher matcher;
87     AwkCompiler compiler;
88     Pattern pattern = null, newline = null;
89     AwkStreamInput input;
90     MatchResult result;
91     Reader file = null;
92
93     // Create AwkCompiler and AwkMatcher instances.
94
compiler = new AwkCompiler();
95     matcher = new AwkMatcher();
96
97     // Attempt to compile the pattern. If the pattern is not valid,
98
// report the error and exit.
99
try {
100       pattern
101     = compiler.compile(regex, AwkCompiler.CASE_INSENSITIVE_MASK);
102       // Compile a pattern representing a string of newlines with other
103
// whitespace stuck around the newlines
104
newline = compiler.compile("(\\s*[\n\r]\\s*)+");
105     } catch(MalformedPatternException e) {
106       System.err.println("Bad pattern.");
107       System.err.println(e.getMessage());
108       System.exit(1);
109     }
110
111
112     // Open input file.
113
try {
114       file = new FileReader("streamInputExample.txt");
115     } catch(IOException e) {
116       System.err.println("Error opening streamInputExample.txt.");
117       System.err.println(e.getMessage());
118       System.exit(1);
119     }
120
121     // Create an AwkStreamInput instance to search the input stream.
122
input = new AwkStreamInput(file);
123
124     // We need to put the search loop in a try block because when searching
125
// an AwkStreamInput instance, an IOException may occur, and it must be
126
// caught.
127
try {
128       // Loop until there are no more matches left.
129
while(matcher.contains(input, pattern)) {
130     // Since we're still in the loop, fetch match that was found.
131
result = matcher.getMatch();
132     
133     // Substitute all newlines in the match with spaces.
134
sentence = Util.substitute(matcher, newline,
135                    new StringSubstitution(" "),
136                    result.toString(), Util.SUBSTITUTE_ALL);
137     System.out.println("\nMatch:\n" + sentence);
138       }
139     } catch(IOException e) {
140       System.err.println("Error occurred while reading file.");
141       System.err.println(e.getMessage());
142       System.exit(1);
143     }
144   }
145 }
146
Popular Tags