//*******************************************
//* Author : Isakovic HAris *
//* Matr.Num: 0325697 *
//* e-mail : e0325697@student.tuwien.ac.at *
//*******************************************
import eprog.*;
public class Compchar {
public static void main (String args[])
{
String erste = EprogIO.readWord(); // Erste String wird gelesen.
String zweite = EprogIO.readWord(); // Zweite String wird gelesen.
int index; // Hilfige integer Zahl fur manche operationen ins programm.
String specStr = "?[]^"; // String von speciele Zeichen.
int start; // Hilfige integer Zahl fur manche operationen ins programm.
int end; // Hilfige integer Zahl fur manche operationen ins programm.
String subStr; // Hilfige String fur ein Such Bereich Representation.
String fall1 = "?"; // Hilfige String fur fall mit "?".
char ind = '['; // Char [
char ind2 = ']'; // Char ]
char ind3 = '^'; // Char ^
char ch1 = erste.charAt(0); // Erste char von erste String.
// Ess muss einzige sein und muss kein lehre Platz sein.
if (Character.isWhitespace(ch1) || erste.length() > 1) // Here wird uberprufen, ob dass erste String gultig ist.
{ // Wenn diese bedingungen sind erfult, wird es "FALSCHE EINGABE" ausdrucken.
EprogIO.println("FALSCHE EINGABE");
System.exit(0); // Progoramm wird sich sofort ausschalten.
}
// Here wird das Programm zweite String uberprufen. Dass Printzip ist gleich wie bei dem obigen fall.
if (zweite.length() < 1 || zweite.length() > 30 || Character.isWhitespace(ch1))
{
EprogIO.println("FALSCHE EINGABE");
System.exit(0);
}
// Uberprufung von zweite string geht weiter.
char ch;
char slash = '\\';
if ( zweite.startsWith("[") && !zweite.endsWith("]")) // Da wird Programm uberprufen ob die schlsende Klammer felt.
{
EprogIO.println("FALSCHE EINGABE");
System.exit(0);
}
index = 0; // Index wird auf null gestellt
// Here uberpruft Programm ein special Fall , wenn dass Suchbereich ist zwischen klammern.
if (zweite.startsWith("[") && zweite.endsWith("]"))
{
if (zweite.charAt(1) == '^') // "start" und "end" sind die start und die end von Suchbereichs
{
start = zweite.indexOf(ind) + 2 ; // Wenn negatives Fall und Suchebereich wird von des drittes Zeichens uberprufen.
end = zweite.lastIndexOf(ind2) - 1; // Ende wird ein Zeichen vor des Letztes sein.
}
else
{
start = zweite.indexOf(ind) + 1 ; // da ist normall fall und Suchberiech wird von des zweites Zeichens uberprufen.
end = zweite.lastIndexOf(ind2) - 1; // Gleich wie in letztes Fall.
}
subStr = zweite.substring(start,end); // Here wird Suchbereich gestellt , wie ein substring von zweite String.
index = 0;
// Uberprufung von zweites String um Richtigkeit. Im zwei Falls mit Klamern.
// Da steht zwei for loops , in erste es geth durch String fon special Zeichen
//In di zweite loop geht Programm durch Suchbereich String und prufen es.
for (int i = 0; i < specStr.length() ; i++)
{
ch = specStr.charAt(i);
for (int j = 0; j < subStr.length(); j++)
{
if ( (j == 0 && subStr.charAt(j) == ch) || (subStr.charAt(j) == ch && subStr.charAt(j-1) != slash))
{
EprogIO.println("FALSCHE EINGABE");
System.exit(0);
}
}
}
}
// Here wird das Programm vergleichen zwei Strings im fall wann sie nur ein Zeichen enthelen.
if (zweite.length() == erste.length() && !Character.isWhitespace(zweite.charAt(0)) && !zweite.equals(fall1))
{
if (erste.equals(zweite))
{
EprogIO.println("JA");
System.exit(0);
}
else
{
EprogIO.println("NEIN");
System.exit(0);
}
}
else
{
//Wenn das zweite String ist gleich mit ? , dann sind die alle Vergleichungen positiv.
if (zweite.equals(fall1))
{
EprogIO.println("JA");
System.exit(0);
}
}
// Verglaichung des erstes String mit das Suchbereich des zweites String.
if (zweite.startsWith("[") && zweite.endsWith("]"))
{
if(zweite.charAt(1) != ind3) // Normal Fall mit zwei Klamern und Suchebegrief.
{
start = zweite.indexOf(ind);
end = zweite.lastIndexOf(ind2);
subStr = zweite.substring(start,end);
if (subStr.indexOf(erste,0) != -1) // Prufung ob das Substring enthalt erste String.
{
EprogIO.println("JA");
System.exit(0);
}
else
{
EprogIO.println("NEIN");
System.exit(0);
}
}
else // Zweite Fall mit negativer Vergleich
{
start = zweite.indexOf(ind3);
end = zweite.lastIndexOf(ind2);
subStr = zweite.substring(start,end);
if (subStr.indexOf(erste,0) != -1)
{
EprogIO.println("NEIN");
System.exit(0);
}
else
{
EprogIO.println("JA");
System.exit(0);
}
}
}
//Fall mit dem backslash wie ein Zeichen indikator , fur Vergleich der spezialer Zeichen.
if ( zweite.startsWith("\\") && zweite.length() == 2)
{
if (erste.charAt(0) == zweite.charAt(1))
{
EprogIO.println("JA");
System.exit(0);
}
else
{
EprogIO.println("NEIN");
System.exit(0);
}
}
else
{
EprogIO.println("FALSHE EINGABE");
System.exit(0);
}
}
}