Dienstag, 20. Januar 2009

Sample Source Code


import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;

/**
* java-such-mark: .SuchMark.java
*
* Zweck: markiere alle Suchbegriffe in der Eingabe durch Großschreibung und
* Sternchen davor und danach.
*
* 10.01.2009, Harald R. Haberstroh
*/

/**
* TODO Zweck
*
* @author Harald R. Haberstroh (user)
*
*/
public class SuchMark {

private String[] suchbegriffe;

/**
* @param suchbegriffe
*/
public SuchMark(String[] suchbegriffe) {
this.suchbegriffe = suchbegriffe;
}

/**
* markiere alle Vorkommnisse der suchbegriffe im String content und liefere
* das Ergebnis zurück.
*
* @param content
* Eingabetext
* @return Text mit Markierungen
*/
public String mark(String content) {
for (String what : suchbegriffe) {
content = mark(content, what);
}
return content;
}

/**
* markiere alle Vorkommnisse des Suchbegriffs what im Text content. Suche die
* Position des Suchbegriffs mit indexOf() und verkleinere den content auf den
* Rest hinter den Suchbegriff, nachdem der String vor dem Suchbegriff und der
* markierte Suchbegriff an einen StringBuilder angehängt wurde.
*
* @param content
* Text
* @param what
* Suchbegriff
* @return Text mit Markierungen
*/
private String mark(String content, String what) {
StringBuilder sb = new StringBuilder();
int pos;
int len = what.length();
String wHAT = what.toUpperCase(); // der großgeschriebene Suchbegriff
while ((pos = content.indexOf(what)) >= 0) {
sb.append(content.substring(0, pos)); // alles vor Suchbegriff dazu
sb.append('*'); // Markierung...
sb.append(wHAT);
sb.append('*');
content = content.substring(pos + len); // alles vor Suchbegriff und
// Suchbegriff selbst entfernen
}
sb.append(content); // den Rest noch anhängen
return sb.toString();
}

/**
* liest eine ganze Textdatei.
*
* @param in
* geöffneter BufferedReader (Inputstream)
* @return gelesener String
* @throws IOException
*/
public String readStream(BufferedReader in) throws IOException {
StringBuilder sb = new StringBuilder();
String line;
while ((line = in.readLine()) != null) {
sb.append(line);
sb.append("\n");
}
return sb.toString();
}

/**
* schreibt den String in Textdatei.
*
* @param out
* PrintStream zum Schreiben
* @param content
* Text zum Speichern
*/
public void writeStream(PrintWriter out, String content) {
out.write(content);
out.flush();
}

/**
* Hilfe ausgeben und Ende
*/
private static void help() {
System.out.println("Markieren der Suchbegriffe in der Eingabe.\n"
+ "Aufruf: java SuchMark [-h] [-o out] suchbegriffe...\n"
+ " -h ... Hilfe\n" + " -o out ... Ausgabe in die Datei out\n"
+ " suchbegriffe ... ein oder mehrere Suchbegriffe");
System.exit(0);
}

/**
* Ausgeben einer Fehlermeldung und optional beenden des Programms.
*
* @param exitStatus
* Programm beenden, wenn != 0
* @param format
* Formatstring (Text)
* @param objects
* Weiterer Parameter
*/
private static void fehler(int exitStatus, String format, Object... objects) {
System.err.print("FEHLER in SuchMark: ");
System.err.printf(format, objects);
if (exitStatus != 0) {
System.exit(exitStatus);
}
}

/**
* @param args
*/
public static void main(String[] args) {
if (args.length > 0) {
PrintWriter out = new PrintWriter(System.out);
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
if (args[0].equals("-h")) {
help();
} else if (args[0].equals("-o")) {
// Ausgabedatei
if (args.length > 2) { // -o out such...
try {
out = new PrintWriter(args[1]);
} catch (FileNotFoundException e) {
fehler(2, "Kann Datei %s nicht für Ausgabe öffnen! (%s)\n",
args[1], e.getLocalizedMessage());
}
// Erzeuge neues args nur mit den Suchbegriffen...
String[] argumente = new String[args.length - 2];
for (int i = 0; i < argumente.length; i++) {
argumente[i] = args[i + 2];
}
args = argumente;
} else {
fehler(1,
"Es muss bei Option -o der Name einer Datei und mindestens "
+ "\nein Suchbegriff angegeben werden!\n");
}
}
// Suchbegriffe bearbeiten
SuchMark suchmark = new SuchMark(args);
String content = null;
try {
content = suchmark.readStream(in);
} catch (IOException e) {
fehler(3, "Ein-/Ausgabefehler: %s\n", e.getLocalizedMessage());
}
String markedContent = suchmark.mark(content);
suchmark.writeStream(out, markedContent);
out.close();
} else {
fehler(0, "mindestens einen Suchbegriff angeben. Hilfe mit -h\n");
}
}

}