Mittwoch, 27. Mai 2009

 

Wörter in der Eingabe erkennen

Nehmen wir an, es müssen Wörter aus der Eingabe erkannt werden. Wir definieren (damit ist nicht gesagt, dass diese Definition in der Realität sinnvoll ist), dass ein Wort aus mindestens 3 Buchstaben besteht. Zum Lesen verwenden wir die Klasse Scanner. Mit Hilfe dieser Klasse kann man aus Streams (z.B. System.in) oder auch aus Strings lesen. Hier ein Scrapbook:
class T {
  boolean isWord(String word) {
    return word.matches("^[A-Za-zÄäÖöÜüß]{3,}$");
  }
}
T t = new T();
String string = "zwei Wörter, noch eins ke1nes schluss. a.xxx";
string = string.replaceAll("[\\.,?!;]", " "); // Satzzeichen sind Worttrenner...
java.util.Scanner in = new java.util.Scanner(string);
while (in.hasNext()) {
  String word = in.next();
  if (t.isWord(word)) {
    System.out.printf("%s ist ein Wort\n", word);
  } else {
    System.out.printf("%s ist KEIN Wort\n", word);
  }
}

Die Klasse T exisitiert in diesem Scapbook nur, um die Methode isWord() bereitzustellen. Diese Methode verwendet einen Regulären Ausdurck zu Erkennung eines Wortes: ^[A-Za-zÄäÖöÜüß]{3,}$. Dieser Ausdruck passt zu allen Strings, die aus mindestens drei ({3,}) Buchstaben (Liste der Zeichen in eckigen Klammern) bestehen.

Die Methode relpaceAll() ersetzt alle Satzzeichen durch Leerzeichen (sind Worttrenner). Dadurch bekommt man durch Leerzeichen getrennte Strings.

Wollte man aus der Standardeingabe lesen, dann müsste man das so machen:
java.util.Scanner in = new java.util.Scanner(System.in);
while (in.hasNext()) {
  String word = in.next();
  if (t.isWord(word)) {
    System.out.printf("%s ist ein Wort\n", word);
  } else {
    System.out.printf("%s ist KEIN Wort\n", word);
  }
}

Das heißt, die Logik bleibt gleich, nur die Initialisierung des Scanners ist unterschiedlich.

Labels: ,


Kommentare:

Kommentar veröffentlichen

Abonnieren Kommentare zum Post [Atom]





<< Startseite

This page is powered by Blogger. Isn't yours?

Abonnieren Posts [Atom]