// Autor: Stemer Bertram // Matr.Nr.: 0257071 // Studienkennzahl: E033535 // Beispiel: 3 // Beispielnummer: 3138 import eprog.*; public class Compstring extends EprogIO { //Deklaration der Variabeln static String sInput, sSearch, Output = "NEIN"; static String spezSign = "*^?[]\\"; static final char questionmark = '?'; static final char backslash = '\\'; static final char braceOpen = '['; static final char braceClose = ']'; static final char exception = '^'; static final char asterik = '*'; static boolean flBrCount = false, flStLength = false, flAsterik, flBrace, flBraceSlash, flNoBraceSlash; static int brOpCount, brClCount, asCount, countException, countAsterik, indBegin, indEnd, indBegWhile, indEndWhile; static int indBegAsterik, indEndAsterik, indBegAstWhile, indEndAstWhile, iAst, len; static String subString, subAstString, subInput; static char[] subArray, sArray, iArray, spezArray, subAstArray; //Methode um Strings einzulesen public static void readInput() { sInput = readWord(); sSearch = readWord(); //prueft laenge des ersten Strings if (sInput.length() > 30) { Output = "FALSCHE EINGABE"; flStLength = true; } //pruef laenge des zweiten Strings else if (sSearch.length() > 30) { Output = "FALSCHE EINGABE"; flStLength = true; } } //end readInput //Methode zur Suche des Zeichens '*' public static String searchAsterik() { //Hier wird die Position des Sterns gesucht indBegAsterik = sSearch.indexOf(asterik); indEndAsterik = sSearch.lastIndexOf(asterik); indBegAstWhile = indBegAsterik; //Wenn nur ein Stern vorhanden ist, kommt die Ausgabe JA if(indBegAsterik == 0 && sSearch.length() == 1) { Output = "JA"; flAsterik = true; } //Zaehlt die Anzahl der '*' im searchString mit asCount while(indBegAstWhile >= 0) { asCount++; indBegAstWhile++; indBegAstWhile = sSearch.indexOf(asterik, indBegAstWhile); } //Wenn die Anzahl der '*' ist 1, dann diese IF-Schleife if(asCount == 1) { //Wenn '*' an der ersten Stelle steht if(indBegAsterik == 0) { //Erstellt einen Substring nach dem Stern und wandelt diesen in ein Array um subAstString = sSearch.substring(indBegAsterik+1); //Laenge fuer die Methode regionMatches wird erstellt len = subAstString.length(); //Schleife zur Pruefung des Substringes mit der Eingabe for(int i=0; i < sInput.length(); i++) { //Erstellt einen neuen Substring zum Laengenvergleich im IF-Statement String iSubString = sInput.substring(i); //Prueft die beiden Strings auf Gleichheit - Var i verschiebt die Pruefung immer um eine Stelle if(sInput.regionMatches(false, i, subAstString, 0, len) && iSubString.length() == len) { Output = "JA"; flAsterik = true; break; } } } //Wenn '*' an der letzten Stelle steht else if(indEndAsterik == (sSearch.length()-1)) { //Erstellt einen SubString ohne '*' und wandelt diesen in ein Array um subAstString = sSearch.substring(0, (sSearch.length()-1)); subAstArray = subAstString.toCharArray(); //iArray wird hier initialisiert iArray = sInput.toCharArray(); // for(int i=0; i < subAstString.length(); i++) { //Wenn die Zeichen gleich sind, zaehlt der Counter if(subAstArray[i] == iArray[i]) { countAsterik++; } //Der Counter wird mit der laenge des Substrings verglichen if(countAsterik == subAstArray.length) { Output = "JA"; flAsterik = true; break; } } } } //Wenn 2 '*' vorhanden und Stern steht am Anfang und am Ende if(asCount == 2 && indBegAsterik == 0 && indEndAsterik == (sSearch.length()-1)) { //Erstellt einen Substring zwischen '*' und wandelt diesen in ein Array um subAstString = sSearch.substring(indBegAsterik+1, indEndAsterik); subAstArray = subAstString.toCharArray(); //Laenge des Substrings fuer die Methode regionMatches wird erstellt len = subAstString.length(); //Prueft die ob der Substring mit der Eingabe uebereinstimmt for(int i=0; i < sInput.length(); i++) { String iSubString = sInput.substring(i); //Prueft Uebereinstimmung zwischen Eingabe und Substring if(sInput.regionMatches(false, i, subAstString, 0, len)) { Output = "JA"; flAsterik = true; break; } } } return Output; } //end searchAsterik //Methode zur Pruefung auf Gleichheit public static String searchEquals() { //hier werden die Strings in eine Array umgewandelt iArray = sInput.toCharArray(); sArray = sSearch.toCharArray(); //Wenn beide gleich und die Laenge 30 nicht ueberschritten und kein Stern gefunden, dann dieses IF-Statement if(sSearch.equals(sInput) && flStLength == false && flAsterik == false) { Output = "JA"; flBrCount = true; } //Wenn im Searchstring ein Fragezeichen, dann wird dieses Statement aufgerufen else if(sSearch.indexOf(questionmark) >= 0 && sInput.length() == sSearch.length() && flStLength == false) { //erstellt eine Laufzeitvariable um die beiden Arrays miteinander zu vergleichen for(int i=0; i < sSearch.length(); i++) { if(iArray[i] == sArray[i] || sArray[i] == questionmark) { Output = "JA"; break; } else if(iArray[i] != sArray[i]) { Output = "NEIN "; break; } } } //else if(sSearch.length() != sInput.length() && flStLength == false && flAsterik == false && flBrace == false && flBraceSlash == false) Output = "NEIN"; return Output; } //end searchEquals //Methode um nach einem Backslash zu suchen public static void searchBackslash(String subStrg) { //suche nach Backslash und gibt die Position zurueck int indBackslash = subStrg.indexOf(backslash); //wandelt den String spezSign in ein Array um spezArray = spezSign.toCharArray(); subArray = subStrg.toCharArray(); //wenn ein Backslash vorhanden, dann dieses Statement if(indBackslash >= 0 && flStLength == false && indBegin >= 0 && indEnd >=0) { //prueft die Position des Backslashes und schaut was dahinter kommt for(int i=0; i < spezArray.length; i++) { //wenn es uebereinstimmt, dann wird das Flag gesetzt if(subArray[indBackslash] == backslash && subArray[indBackslash+1] == spezArray[i]) { //setzt ein Flag, wenn sonderzeichen gefunden switch(spezArray[i]) { case questionmark: case braceOpen: case braceClose: case asterik: case exception: flBraceSlash = true; break; } break; } } } //wenn kein Backslash, doch ein Sonderzeichen, dann diese Schleife if(indBackslash == -1 && flStLength == false && indBegin >= 0 && indEnd >= 0) { //Sonderzeichen wird gesucht und setzt ein Flag for(int i=0; i < spezArray.length; i++) { for(int j=0; j < subArray.length; j++) { if(subArray[j] == spezArray[i]) { Output = "FALSCHE EINGABE"; flNoBraceSlash = true; break; } } } } } //end searchBackslash //Methode um die Klammer zu finden public static String searchBraces() { //Suche nach der eckigen Klammer und gibt die Position an indBegin = sSearch.indexOf(braceOpen); indEnd = sSearch.lastIndexOf(braceClose); indBegWhile = indBegin; indEndWhile = indEnd; //Suche nach Ausname '^' an Stelle '['+1 int indException = sSearch.indexOf(braceOpen)+1; //Wenn eckige Klammer Auf und Zu vorhanden if(indBegin >= 0 && indEnd >= 0 && flStLength == false) { //erzeugt einen Substring zwischen den eckigen Klammer und wandelt diesn in ein Array um subString = sSearch.substring((indBegin+1), indEnd); //Zaehlt wieviel Klammern Auf vorhanden sind while(indBegWhile >= 0) { ++brOpCount; indBegWhile = indBegWhile + 1; indBegWhile = sSearch.indexOf(braceOpen, indBegWhile); } //Zaehlt wieviel Klammern Zu vorhanden sind while(indEndWhile >= 0) { ++brClCount; indEndWhile = indEndWhile - 1; indEndWhile = sSearch.lastIndexOf(braceClose, indEndWhile); } //Wenn Klammer Auf und - Zu vorhanden nicht aber Exception '^', dann dieses Statement if(sArray[indException] != exception && brOpCount >= 1 && brClCount >= 1 == flNoBraceSlash == false) { //Ruft die Methode auf um den Backslash zu ueberpruefen searchBackslash(subString); if(flNoBraceSlash == false) { //Erzeugt Laufzeitvariabeln um die einzelnen Zeichen aus der Klammer mit dem input Array zu vergleichen for(int i=0; i < iArray.length; i++) { for(int j=0; j < subString.length(); j++) { if(iArray[i] == subArray[j]) { Output = "JA"; //i und j setzen die beiden for-Schleifen zurück, so dass diese abgebrochen werden. i = iArray.length; j = subString.length(); flBrace = true; } //Wenn das Ende der FOR-Schleife erreicht ist, dann passt kein Zeichen aus der Klammer if((i+1) == iArray.length && (j+1) == subArray.length) { Output = "NEIN"; flBrace = true; break; } } } } } //Wenn an zweiter Stelle der Klammer Auf das Zeichen Exception '^' steht else if (sArray[indException] == exception) { //erzeugt einen Substring nach dem zeichen Exception '^' und vor dem Ende der Klammer Zu subString = sSearch.substring((indBegin+2), indEnd); searchBackslash(subString); //Laufzeitvariable zur Pruefung ob ein Zeichen passt for(int i=0; i < iArray.length; i++) { for(int j=0; j < subArray.length; j++) { //Bei gleichen Zeichen wird die Variable countException um eines erhoeht if(iArray[i] == subArray[j]) countException++; } } //wenn countException ist Null, dann stimmt keines ueberein if(countException == 0 && flNoBraceSlash == false) Output = "JA"; //wenn countException ist groesser als 1, dann stimmt diese Eingabe nicht else if(countException > 0 && flNoBraceSlash == false) Output = "NEIN"; } //prueft auf mehrere Klammer und else if(brOpCount > 1 && flBraceSlash == false|| brClCount > 1 && flBraceSlash == false) { Output = "FALSCHE EINGABE"; } } return Output; } //end searchBraces //Methode fuer die Ausgabe public static void display() { if(Output != null) EprogIO.println(Output); } //end display } //end class
Fr Jul 30 13:54:24 CEST 2021
patent_button.gif valid-html401.png elektra.jpg fsfe-logo.png valid-css.png vim.gif anybrowser.gif