2016-08-23 263 views
-3

我有下面的代碼:匹配字符串通配符

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

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

的問題是,現在第二種情況下是行不通的。

我需要一些可以充當通配符的東西,以便可以識別任何「OR.ISSUE1234567」並將適當的值分配給p變量。

所以如果d以「OR」開始。 p的值將是「重新發行」。

關於如何做到這一點的任何想法?

+0

你聽說過正則表達式?這會給你一個更一般的方式來匹配模式。如果這很簡單,'p.StartsWith(「OR。」)'會做。但是,您無法使用任何一種開關。 –

+3

很明顯答案是否定的 – Bass

回答

1

RegEx似乎是一個更好的方法。使用正則表達式,您可以使用通配符,它​​可以非常強大。如果添加「使用System.Text.RegularExpressions;」你將能夠訪問它。以下是一個示例。有很多網站可以在Google上找到,這些網站將解釋不同的符號以及如何構建匹配模式。

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

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

     Console.ReadLine(); 
0

您可以通過開關這樣做是爲了使用,而不是一個switch語句條件:

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

或者你可以看看使用正則表達式來匹配您的字符串,如果你想要做更復雜的東西吧(見MSDN)。

0

沒有辦法使用帶有通配符的switch塊(或例如正則表達式)。但根據你的問題,你可以這樣做:

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... 
} 

但是,因爲你只有拖case聲明,沒有必要switch的。使用if/else更容易,更有意義。

0

如果你只有開始與類型檢查的支持,你可能需要在運行時更改他們,你可以使用字典:

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();