2016-08-23 3 views
-3

Ich habe den folgenden Code:Matching String mit Jokerzeichen

string d = "OR.ISSUE226568"; 
string p; 
switch (d) 
{ 
    case "VOID": 
    p = "VOID";       
    break; 

    case "OR.*": 
    p = "Reissue"; 
    break; 
} 

Das Problem ist, dass gerade jetzt der zweite Fall funktioniert nicht.

Ich brauche etwas, das als Platzhalterzeichen fungieren kann, so dass jedes "OR.ISSUE1234567" identifiziert werden konnte und der p-Variable der richtige Wert zugewiesen wurde.

Also wenn d mit "OR" beginnt. der Wert von p wird "Reissue" sein.

Irgendwelche Ideen, wie man das macht?

+0

Sie Reguläre Ausdrücke gehört haben? Das würde Ihnen einen allgemeineren Ansatz für Matchmuster geben. Wenn es so einfach ist, würde 'p.StartsWith (" OR. ")' Tun. Sie können jedoch keinen Schalter mit beiden verwenden. –

+3

Es ist irgendwie offensichtlich, dass die Antwort nein ist – Bass

Antwort

1

Es scheint, als wäre RegEx ein viel besserer Ansatz. Mit RegEx können Sie Platzhalter verwenden und es kann ziemlich mächtig sein. Wenn Sie "using System.Text.RegularExpressions" hinzufügen Sie können darauf zugreifen. Unten ist ein Beispiel. Es gibt eine Reihe von Websites, die Sie bei Google finden können, die verschiedene Symbole erklären und die passenden Muster erstellen.

 string d = "OR.ISSUE226568"; 
     string p; 

     if (Regex.IsMatch(d, "^OR.*$")) 
     { 
      Console.WriteLine("Worked!"); 
     } 

     Console.ReadLine(); 
0

Sie können dies entweder durch Schalter tun eine bedingte anstelle einer switch-Anweisung zu verwenden:

if (d == "VOID") 
{ 
    p = "VOID"; 
} 
else if (d.StartsWith("OR.")) 
{ 
    p = "Reissue"; 
} 

Oder Sie bei Verwendung eines Regex aussehen könnte Ihre Zeichenfolge übereinstimmen, wenn Sie etwas komplizierter damit tun wollen (siehe MSDN).

0

Es gibt keine Möglichkeit, switch Block mit einem Platzhalter (oder zum Beispiel Regexes) zu verwenden. Aber nach Ihrer Frage, können Sie dies tun:

string d = "OR.ISSUE226568"; 
if(d.StartsWith("OR.")) 
    d = d.Remove(3); 
string p; 
switch (d) 
{ 
    case "VOID": 
    p = "VOID";       
    break; 

    case "OR.": 
    p = "Reissue"; 
    break; 

    // other cases... 
} 

Aber da Sie nur Schlepptau case Aussage haben, gibt es keine Notwendigkeit, switch überhaupt. Die Verwendung von if/else ist einfacher und macht mehr Sinn.

0

Wenn Sie nur beginnt mit Art der Kontrollen ein Wörterbuch zu unterstützen, und Sie müssen möglicherweise zur Laufzeit zu ändern verwenden Sie können:

string d = "OR.ISSUE226568"; 
//string d= "VOID"; 
// Dictionary with start of the string 
var target = new Dictionary<string,string>() { 
    {"VOID","Void"}, 
    {"OR.", "Reissue"} 
}; 

// find the one that matches 
var p = (from kv in target 
     where d.StartsWith(kv.Key) 
     select kv.Value).FirstOrDefault();