/*************************** * Autor: Stemer Bertram * * Matr.Nr.: 0257071 * * Studienkennzahl: E033535 * * Beispiel: 3 * * Beispielnummer: 3138 * ****************************/ Aufgabenstellung: ================= Es werden zwei Strings mit readWord() eingelesen. Diese String duerfen eine max. Laenge von 30 Zeichen nicht ueberschreiten. Der erste String unterliegt keinerlei syntaktischen Begrenzung. Der zweite String ist der Suchstring, mit welchem geprüft wird, ob eines der Zeichen im ersten String enthalten ist. Beim Suchstring gibt es Suchzeichen wie '*', '^', '\', '[', ']' und '?'. Diese Zeichen haben alle eine besondere Bedeutung welche ich hier kurz beschreiben will. Klammer-Auf '[': Diese ist nur sinnvoll in Kombination mit der Klammer-Zu. Alle Zeichen welche in dieser Klammer enthalten sind z.B. [abc] werden mit dem ersten String geprueft und bei Uebereinstimmung wird die Meldung "JA" ausgegeben. Klammer-Zu ']': Siehe hierzu Klammer-Auf Ausnahme '^': Dieses Zeichen tritt nur in Kombination mit der Klammer-Auf auf. Es kommt an zweiter Stelle und sagt aus, dass nur die Zeichen welche nicht zwischen den Klammern stehen mit dem ersten String passend sind. z.B. [^abc] kommt keines der Zeichen im ersten String vor, dann wird die Meldung "JA" ausgegeben. Fragezeichen '?': Dieses Zeichen steht stellvertretend fuer ein anderes Zeichen. Im Suchstring kann an jeder Stelle das Fragezeichen eingesetzt werden. Sind die beiden Strings dann immer noch gleich lang, dann wird die Ausgabe "JA" ausgedruckt. Stern '*': Der Stern steht fuer einen Teilstring. Steht der Stern am Anfang des Suchbegriffes, dann muss der restliche Teilstring mit dem hinteren Teil des ersten Stringes uebereinstimmen. Steht der Stern jedoch am Ende des Suchbegriffes, dann muss der erste Teilstring mit dem ersten String uebereinstimmen. Backslash '\': Dieses Zeichen soll im Suchbegriff alle Sonderzeichen aufheben. Gibt es im Suchstring eine syntaktisch Falsche Eingabe, wie z.B. [a[b], dann wird die Fehlermeldung "FALSCHE EINGABE" ausgegeben. Beide Strings muessen vollstaendig eingelesen werden. Verwendete Methoden: ==================== Klasse Methode Beschreibung ====== ======= ============ String: regionMatches() -> vergleicht einen String mit einem anderen laenge und position kann mit angegeben werden String: toCharArray() -> wandelt einen String in ein Char Array um String: length() -> gibt die Laenge eines Strings oder Arrays aus String: indexOf() -> sucht nach einem Zeichen und gibt die erste Pos. aus String: lastIndexOf() -> sucht nach einem Zeichen und gibt die letzte Pos. aus String: substring() -> erstellt einen Substring ab einem bestimmten Zeichen Dokumentation: ============== Es wurden zwei Java-Dateien erstellt. Zum einen die Compstring.java und zum anderen die Wildcard.java. Die Wildcard.java enthaelt die Main-Methode und steuert die Methoden der Compstring-Klasse. In der Compstring.java steht der gesamte Programmcode mit den einezelnen Methoden. Es gibt hier folgende Methoden leseEingabe(), searchBackslash(), searchAsterik(), searchEquals(), searchBraces() und display(). Zuerst importiert das Programm die Klasse eprog.*, damit die Eingabe und Ausgabe korrekt gemacht werden kann. Anschließend erzeugt man mit class die neue Klasse Compstring, welche von der EprogIO abgeleitet wird. Ab der Zeile 11 steht die Deklaration der Variabeln. Hier gibt es String, char, char[], int und boolean Variabeln, welche zur Laufzeit des Programmes initialisiert werden. Methode readInput() =================== Diese Methode ließt zwei Strings aus der Commandline ein und ueberprueft diese beiden String auf ihre laenge, welche max. 30 Zeichen haben darf. Beim ueberschreiten dieser Laenge, schreibt sie "FALSCHE EINGABE" in die Output-Variable und setzt eine Flag, damit andere Methoden nicht mehr in diese Variable schreiben duerfen. Methode searchAsterik() ======================= Diese Methode hat keinen Ruekgabewert. Zuerst sucht sie nach der Position des Sternes und schreibt dies in eine Variable. Interessant ist die Anfangs- und die Schlussposition, welches mit der Methode indexOf() und lastIndexOf() unterschieden wird. Ist nur ein Stern vorhanden und sonst kein Nachfolgezeichen, dann stimmt der Suchbegriff mit dem ersten String ueberein. In einer while-Schleife werden die vorhandenden Sterne gezaehlt und in eine int Variable asCount geschrieben. Ist im Suchstring nur ein Stern vorhanden und steht dieser am Anfang, dann erzeugt die If-Schleife einen (substring()) Substring. Die Methode length() schreibt die Laenge des Substrings in die Variable "len". Eine For-Schleife erzeugt eine Laufzeitvariable "i" welche in der neuen Methode regionMatches() benötigt wird. Dieser Methode müssen noch Argumente mitgegeben werden, wie eine boolean Var fuer ignoreCase, Position des ersten Strings(ist Var. i), Postition des Suchstrings und die Laenge (Var. len). Gibt es hier eine Uebereinstimmung des Substringes mit dem ersten String, dann setzt sie hier die Ausgabe "JA". Ist der Stern jedoch am Ende des Suchstrings, dann tritt die naechste If-Schleife in kraft. Auch diese erstellt einen neuen Substring des Suchstrings und wandelt diesen mit der Methode toCharArray() in ein Char-Array um. Dieses Substring Array wird mit dem ersten String-Array verglichen und erhoeht eine Countervariable "countAsterik" um eines wenn sie uebereinstimmen. Nur wenn diese Variable genau so groß ist wie die Laenge des subAstArray, setzt sich die Ausgabe "JA" und bricht die For-Schleife ab. Ist der Stern zweimal vorhanden, dann springt das Programm in die naechste If-Schleife. Hier prueft es auf die Position des Sterns. Diese soll am Anfang oder am Ende sein. Ist dies der Fall, dann erzeugt die Methode substring() wieder einen neuen SubString des Suchbegriffes zwischen den beiden Sternen und wandelt diesen mit der Methode toCharArray() in ein Array um. Durch eine For-Schleife erzeugt man eine Laufzeitvariable welche fuer die Pruefung des ersten Strings benoetigt wird. Diese beiden Strings werden wieder mit der Methode regionMatches() miteinander verglichen, wie schon im ersten Absatz dieser Methode beschrieben ist. Kommt es hier zu einer Uebereinstimmung, gibt das Programm die Meldung "JA" aus. Die generierten Ausgaben werden mit dem return-Statement an die Methode zurueck gegeben. Methode searchEquals() ====================== searchEquals() ueberprueft mit der Methode equals() die beiden Strings miteinander. Sind beide gleich, dann erzeugt sie die Ausgabe "JA" und setzt ein Flag "flBrCount" auf true. Ist in diesem Suchstring ein Fragezeichen zu finden und ist die Laenge der beiden Strings immer noch gleich, so faellt man in die else if-Schleife und prueft mittels einer Laufzeitvariable die beiden Strings auf Gleichheit. Die Strings wurden in ein Array umgewandelt, damit jedes einzelne Zeichen geprueft werden kann. Stimmt die Laenge des ersten Strings mit dem Suchbegriff nicht ueberein, generiert das Programm die Meldung "NEIN" ueber die else If-Schleife. Rueckgabetyp der Methode ist das Stringobjekt "Output". Methode searchBackslash() ========================= Dieser Methode muss ein String mitgegeben werden. Das Programm wandelt diesen String in ein Array und prueft auf das vorhandensein eines Backslashes. Ist dieser vorhanden und steht dieser Zwischen zwei eckigen Klammern, dann startet eine For-Schleife und vergleicht die Zeichen nach dem Backslash auf Sonderzeichen. Sind Sonderzeichen vorhanden, dann setzt die Switch-Schleife ein Flag, welches in der Methode searchBrace() benoetigt wird. Das zweite If-Statement ruft sich auf, wenn kein Backslash aber Sonderzeichen zwischen Klammern vorhanden sind. Ist dies der Fall, dann gibt es eine Fehlermeldung "FALSCHE EINGABE". Die Methode hat keinen Rückgabewert. Methode searchBraces() ====================== Die Methode searchBraces() dient dazu, vorhanden Klammern (Auf und/oder Zu) im Suchbegriff zu finden. Zuerst sucht das Programm, mit der Methode indexOf(), nach KlammerAuf und schreibt die Position in die Var. indBegin. Dann sucht das Programm die KlammerZu und verwendet dazu die Methode lastIndexOf(). Sind beide vorhanden faellt man in die If-Schleife. Hier wird zwischen den Klammern, ein neuer Substring erzeugt und in die Variable subString geschrieben. In der If-Schleife gibt es zwei While-Schleifen mit welchen die Anzahl der KlammerAuf bzw. KlammerZu abgezaehlt wird. Diese Variable benoetigt das naechste If-Statement zusammen mit dem nicht vorhandensein der Exception '^' kommt man in dieses Statement. Jetzt uebergibt man die Variable SubString der Methode searchBackslash(). Diese sucht nach Backslash und oder Sonderzeichen und setzt passende Flags. Ist kein Backslash vorhanden, werden alle Zeichen zwischen den Klammern mit dem ersten String ueberprueft. Ist eines davon richtig, setzt sich die Ausgabe auf "JA". Laeuft die Schleife bis ans Ende durch, dann kommt die Meldung "NEIN". In einer Else If-Schleife prueft das Programm auf das Ausnahmezeichen. Ist dieses vorhanden, erzeugt das Programm einen neuen Substring und uebergibt diesen der searchBackslash() Methode. Diese Methode setzt die benoetigten Flags, wie oben beschrieben. Mit einer For-Schleife werden Uebereinstimmungen zwischen dem ersten String und dem String zwischen der Klammer geprueft und erhoeht einen Counter um den Wert eins. Ist diese Var. countException groeßer als eins, dann stimmt ein Zeichen mit dem Suchstring ueberein und die Ausgabe "NEIN" generiert sich. Hier handelt es sich um die Negation was soviel bedeutet, dass nur Zeichen welche nicht zum ersten String gleich sind, die Ausgabe "JA" erzeugen. Sobald eines passt, wird die Meldung "NEIN" generiert. Eine weitere else If-Schleife erzeugt die Fehlermeldung "FALSCHE EINGABE", wenn mehr als zwei Klammern vorhanden sind und das Flag von der searchBackslash() Methode gesetzt wurde. Methode display() ================= Diese Methode erzeugt die Ausgabe, sofern die Variable Output nicht null ist.