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
Die Klasse
Die Methode
Wollte man aus der Standardeingabe lesen, dann müsste man das so machen:
Das heißt, die Logik bleibt gleich, nur die Initialisierung des Scanners ist unterschiedlich.
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.
Abonnieren Posts [Atom]
Kommentar veröffentlichen