C#: Eingegebener Text soll erkannt und wenn bestimme Wörter vorhanden sind, sollen diese ausgegeben werden?
Hilfe.
Ich habe vor ein paar Wochen angefangen, mir C# beizubringen. Jetzt gerade bin ich am Verzweifeln, weil ich über 80 Fehlermeldungen nicht wegbekomme.
Mein (vereinfachtes) Ziel: Der Teil des Programmes an dem ich gerade arbeite, muss Städtenamen erkennen. Ich gebe z.B. Berlin ein und wenn Berlin auf einer vorher festgelegten Liste ist, setzt er eine Variable auf 1, ansonsten bleibt sie bei 0.
Folgendes habe ich im Internet gefunden und versucht auf mich anzupassen. Wie gesagt, ein Profi bin ich noch nicht.
Es sollten so ca. 30 Städte sein, die ich heraussuchen muss. Am besten auf dem kürzesten und schnellsten Weg. Dazu konnte ich aber nichts im Internet finden, wie das am besten geht.
Console.WriteLine("Geben Sie die Stadt an.");
string n1 = Console.ReadLine();
string sPattern = "Hamburg; Berlin; Köln";
foreach (string s in n1);
Console.WriteLine($"{string,24}");
{
if (System.Text.RegularExpressions.Regex.IsMatch(sPattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase))
}
else
{
Console.WriteLine("Stadt konnte nicht gefunden werden")
}
Vielen Dank für Modifikationen meines Versuches.
Marc
2 Antworten
Schauen wir uns erstmal den aktuellen Code an:
Console.WriteLine("Geben Sie die Stadt an.");
string n1 = Console.ReadLine();
string sPattern = "Hamburg; Berlin; Köln"; //Das ist kein RegEx Pattern. Ein gültiges Pattern sieht so aus: ([A-R])\w+ (matcht alle Buchstaben von A-R)
foreach (string s in n1) ; // eine foreach Schleife benötigt einen {} Block. Zum anderen geht die aktuelle Schleife alle Buchstaben (chars) in n1 durch. Diese ist für deinen Zweck nicht nötig.
Console.WriteLine($"{string,24}"); //dies funktioniert so nicht, string ist ein Datentyp und keine Variable.
{//diese Klammer müsste über Console.WriteLine
if (System.Text.RegularExpressions.Regex.IsMatch(sPattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase))
//in der Funktion fehlt ein Parameter, IsMatch(String, String, RegexOptions)
}
else
{
Console.WriteLine("Stadt konnte nicht gefunden werden")
}
Zum Lösungsansatz:
Regex in Verbindung mit Pattern verwendet man, um Eigaben zur parsen oder zur Textsuche.
Für deinen Zweck ist es ungeignet, da du nach eindeutigen Stadtnamen suchst.
Console.WriteLine("Geben Sie die Stadt an.");
string n1 = Console.ReadLine();
string[] listStaedte = { "Hamburg", "Berlin", "Köln" };
listStaedte = listStaedte.Select(s => s.ToLowerInvariant()).ToArray();
if (listStaedte.Contains(n1.ToLower()))
{
Console.WriteLine("Stadt gefunden!");
}
else
{
Console.WriteLine("Stadt nicht gefunden");
}
Ich habe es mal etwas umgebaut. Anstatt Regex setze ich auf einem Array. In diesem kannst du alle Städte eingeben.
Durch Select + ToLowerInvariant werden alle Strings im Array kleingeschrieben.
Danach verwende ich ".Contains" um zu prüfen, ob die Eingabe innerhalt des Array enthalten ist.
Durch ".ToLower" werden alle Buchstaben kleinzuschreiben. Dies verhindert, dass eine Eingabe wie "berLin" nicht erkannt wird.
Danke dir werde es morgen nach der Arbeit mal ausprobieren:). Auch Danke für die Erklärungen. Im Moment blicke ich da noch nicht ganz durch aber wenn ich mich morgen damit vertiefe werde ich bestimmt einiges mehr verstehen.
- sPattern ist keine Liste sondern nur ein String (Liste wäre das List<string>)
- Am einfachsten wäre es wenn du jedes Element von sPattern mit foreach und if auf deine Eingabe überprüfst ( ohne Regex:
foreach (string s in list)
{
If (s == nameStadt)
{
}
}
Hoffe das hilft.