A Block of Text as the Replacement of the Regular Expression Matcher
From Java Example Source Code
Contents |
[edit] Overview - A Block of Text as the Replacement of the Regular Expression Matcher
This is a example of Java program.
[edit] Java Source Code
- Package: com.bruceeckel
- File: TheReplacements.java
package com.bruceeckel; //: c12:TheReplacements.java //From 'Thinking in Java, 3rd ed.' (c) Bruce Eckel 2002 //www.BruceEckel.com. See copyright notice in CopyRight.txt. //Modified by Code Panda. import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Arrays; import java.util.regex.Matcher; import java.util.regex.Pattern; /* * ! Here's a block of text to use as input to the regular expression matcher. * Note that we'll first extract the block of text by looking for the special * delimiters, then process the extracted block. ! */ public class TheReplacements { public static void main(String[] args) throws Exception { //Modified by Code Panda. //In order to run this program with Eclipse, we should give the parameter an absolute path. String pathBase = "C:\\exampleshow\\"; String s = TextFile.read(pathBase + "TheReplacements.java"); // Match the specially-commented block of text above: Matcher mInput = Pattern.compile("/\\*!(.*)!\\*/", Pattern.DOTALL).matcher(s); if (mInput.find()) s = mInput.group(1); // Captured by parentheses // Replace two or more spaces with a single space: s = s.replaceAll(" {2,}", " "); // Replace one or more spaces at the beginning of each // line with no spaces. Must enable MULTILINE mode: s = s.replaceAll("(?m)^ +", ""); System.out.println(s); s = s.replaceFirst("[aeiou]", "(VOWEL1)"); StringBuffer sbuf = new StringBuffer(); Pattern p = Pattern.compile("[aeiou]"); Matcher m = p.matcher(s); // Process the find information as you // perform the replacements: while (m.find()) m.appendReplacement(sbuf, m.group().toUpperCase()); // Put in the remainder of the text: m.appendTail(sbuf); System.out.println(sbuf); } } // /:~ class TextFile extends ArrayList { // Tools to read and write files as single strings: public static String read(String fileName) throws IOException { StringBuffer sb = new StringBuffer(); System.out.println("try to read text from "+fileName+" ..."); BufferedReader in = new BufferedReader(new FileReader(fileName)); String s; while ((s = in.readLine()) != null) { sb.append(s); sb.append("\n"); } in.close(); return sb.toString(); } public static void write(String fileName, String text) throws IOException { PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(fileName))); out.print(text); out.close(); } public TextFile(String fileName) throws IOException { super(Arrays.asList(read(fileName).split("\n"))); } public void write(String fileName) throws IOException { PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(fileName))); for (int i = 0; i < size(); i++) out.println(get(i)); out.close(); } // Simple test: public static void main(String[] args) throws Exception { //Modified by Code Panda. //In order to run this program with Eclipse, we should give the parameter an absolute path. String pathBase = "C:\\exampleshow\\"; String file = read(pathBase+"HelloExampleShow.java"); write(pathBase + "test.txt", file); TextFile text = new TextFile(pathBase + "test.txt"); text.write(pathBase + "test2.txt"); } }
[edit] What Result You Can Get
Run the program, you will get:
try to read text from C:\exampleshow\TheReplacements.java ...
package com.bruceeckel;
//: c12:TheReplacements.java
//From 'Thinking in Java, 3rd ed.' (c) Bruce Eckel 2002
//www.BruceEckel.com. See copyright notice in CopyRight.txt.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
* ! Here's a block of text to use as input to the regular expression matcher.
* Note that we'll first extract the block of text by looking for the special
* delimiters, then process the extracted block. !
*/
public class TheReplacements {
public static void main(String[] args) throws Exception {
String pathBase = "C:\\exampleshow\\";
String s = TextFile.read(pathBase + "TheReplacements.java");
// Match the specially-commented block of text above:
Matcher mInput = Pattern.compile("/\\*!(.*)!\\*/", Pattern.DOTALL).matcher(s);
if (mInput.find())
s = mInput.group(1); // Captured by parentheses
// Replace two or more spaces with a single space:
s = s.replaceAll(" {2,}", " ");
// Replace one or more spaces at the beginning of each
// line with no spaces. Must enable MULTILINE mode:
s = s.replaceAll("(?m)^ +", "");
System.out.println(s);
s = s.replaceFirst("[aeiou]", "(VOWEL1)");
StringBuffer sbuf = new StringBuffer();
Pattern p = Pattern.compile("[aeiou]");
Matcher m = p.matcher(s);
// Process the find information as you
// perform the replacements:
while (m.find())
m.appendReplacement(sbuf, m.group().toUpperCase());
// Put in the remainder of the text:
m.appendTail(sbuf);
System.out.println(sbuf);
}
} // /:~
class TextFile extends ArrayList {
// Tools to read and write files as single strings:
public static String read(String fileName) throws IOException {
StringBuffer sb = new StringBuffer();
System.out.println("try to read text from "+fileName+" ...");
BufferedReader in = new BufferedReader(new FileReader(fileName));
String s;
while ((s = in.readLine()) != null) {
sb.append(s);
sb.append("\n");
}
in.close();
return sb.toString();
}
public static void write(String fileName, String text) throws IOException {
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(fileName)));
out.print(text);
out.close();
}
public TextFile(String fileName) throws IOException {
super(Arrays.asList(read(fileName).split("\n")));
}
public void write(String fileName) throws IOException {
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(fileName)));
for (int i = 0; i < size(); i++)
out.println(get(i));
out.close();
}
// Simple test:
public static void main(String[] args) throws Exception {
String pathBase = "C:\\exampleshow\\";
String file = read(pathBase+"HelloExampleShow.java");
write(pathBase + "test.txt", file);
TextFile text = new TextFile(pathBase + "test.txt");
text.write(pathBase + "test2.txt");
}
}
p(VOWEL1)ckAgE cOm.brUcEEckEl;
//: c12:ThEREplAcEmEnts.jAvA
//FrOm 'ThInkIng In JAvA, 3rd Ed.' (c) BrUcE EckEl 2002
//www.BrUcEEckEl.cOm. SEE cOpyrIght nOtIcE In COpyRIght.txt.
ImpOrt jAvA.IO.BUffErEdREAdEr;
ImpOrt jAvA.IO.BUffErEdWrItEr;
ImpOrt jAvA.IO.FIlEREAdEr;
ImpOrt jAvA.IO.FIlEWrItEr;
ImpOrt jAvA.IO.IOExcEptIOn;
ImpOrt jAvA.IO.PrIntWrItEr;
ImpOrt jAvA.UtIl.ArrAyLIst;
ImpOrt jAvA.UtIl.ArrAys;
ImpOrt jAvA.UtIl.rEgEx.MAtchEr;
ImpOrt jAvA.UtIl.rEgEx.PAttErn;
/*
* ! HErE's A blOck Of tExt tO UsE As InpUt tO thE rEgUlAr ExprEssIOn mAtchEr.
* NOtE thAt wE'll fIrst ExtrAct thE blOck Of tExt by lOOkIng fOr thE spEcIAl
* dElImItErs, thEn prOcEss thE ExtrActEd blOck. !
*/
pUblIc clAss ThEREplAcEmEnts {
pUblIc stAtIc vOId mAIn(StrIng[] Args) thrOws ExcEptIOn {
StrIng pAthBAsE = "C:\\ExAmplEshOw\\";
StrIng s = TExtFIlE.rEAd(pAthBAsE + "ThEREplAcEmEnts.jAvA");
// MAtch thE spEcIAlly-cOmmEntEd blOck Of tExt AbOvE:
MAtchEr mInpUt = PAttErn.cOmpIlE("/\\*!(.*)!\\*/", PAttErn.DOTALL).mAtchEr(s);
If (mInpUt.fInd())
s = mInpUt.grOUp(1); // CAptUrEd by pArEnthEsEs
// REplAcE twO Or mOrE spAcEs wIth A sInglE spAcE:
s = s.rEplAcEAll(" {2,}", " ");
// REplAcE OnE Or mOrE spAcEs At thE bEgInnIng Of EAch
// lInE wIth nO spAcEs. MUst EnAblE MULTILINE mOdE:
s = s.rEplAcEAll("(?m)^ +", "");
SystEm.OUt.prIntln(s);
s = s.rEplAcEFIrst("[AEIOU]", "(VOWEL1)");
StrIngBUffEr sbUf = nEw StrIngBUffEr();
PAttErn p = PAttErn.cOmpIlE("[AEIOU]");
MAtchEr m = p.mAtchEr(s);
// PrOcEss thE fInd InfOrmAtIOn As yOU
// pErfOrm thE rEplAcEmEnts:
whIlE (m.fInd())
m.AppEndREplAcEmEnt(sbUf, m.grOUp().tOUppErCAsE());
// PUt In thE rEmAIndEr Of thE tExt:
m.AppEndTAIl(sbUf);
SystEm.OUt.prIntln(sbUf);
}
} // /:~
clAss TExtFIlE ExtEnds ArrAyLIst {
// TOOls tO rEAd And wrItE fIlEs As sInglE strIngs:
pUblIc stAtIc StrIng rEAd(StrIng fIlENAmE) thrOws IOExcEptIOn {
StrIngBUffEr sb = nEw StrIngBUffEr();
SystEm.OUt.prIntln("try tO rEAd tExt frOm "+fIlENAmE+" ...");
BUffErEdREAdEr In = nEw BUffErEdREAdEr(nEw FIlEREAdEr(fIlENAmE));
StrIng s;
whIlE ((s = In.rEAdLInE()) != nUll) {
sb.AppEnd(s);
sb.AppEnd("\n");
}
In.clOsE();
rEtUrn sb.tOStrIng();
}
pUblIc stAtIc vOId wrItE(StrIng fIlENAmE, StrIng tExt) thrOws IOExcEptIOn {
PrIntWrItEr OUt = nEw PrIntWrItEr(nEw BUffErEdWrItEr(nEw FIlEWrItEr(fIlENAmE)));
OUt.prInt(tExt);
OUt.clOsE();
}
pUblIc TExtFIlE(StrIng fIlENAmE) thrOws IOExcEptIOn {
sUpEr(ArrAys.AsLIst(rEAd(fIlENAmE).splIt("\n")));
}
pUblIc vOId wrItE(StrIng fIlENAmE) thrOws IOExcEptIOn {
PrIntWrItEr OUt = nEw PrIntWrItEr(nEw BUffErEdWrItEr(nEw FIlEWrItEr(fIlENAmE)));
fOr (Int I = 0; I < sIzE(); I++)
OUt.prIntln(gEt(I));
OUt.clOsE();
}
// SImplE tEst:
pUblIc stAtIc vOId mAIn(StrIng[] Args) thrOws ExcEptIOn {
StrIng pAthBAsE = "C:\\ExAmplEshOw\\";
StrIng fIlE = rEAd(pAthBAsE+"HEllOExAmplEShOw.jAvA");
wrItE(pAthBAsE + "tEst.txt", fIlE);
TExtFIlE tExt = nEw TExtFIlE(pAthBAsE + "tEst.txt");
tExt.wrItE(pAthBAsE + "tEst2.txt");
}
}
[edit] Required External Libraries and/or Files for this Java Example
In order to run this example, you should make a folder as C:\exampleshow, and copy TheReplacements.java into it.
http://www.ase2009.com/ online casino 132 http://www.hellzyea.com/health health insurance 8DDD http://www.yourautoinsurancesite.com/ auto insurance quotes 135811 http://www.makemeasammich.com/ auto insurance mcnxu
[edit] Question & Answer
Any question?
Click edit and post your question or answer here.
