2013-01-01 13 views
1

我工作在C#和我有很多包含地址字符串,如:分割地址字符串轉換成數字和文字部分,而不使用正則表達式

10 Downing Street 
Birch Lane 7 
Palm Creek 8 Street 
84 Chancellor Place 
Battle on the Somme 56 

等。

我需要將這些字符串拆分爲數字部分(如「10」或「7」)和文本部分(如「Downing street」或「Birch Lane」)。

噢,我被要求不要使用RegEx。

我已經試過已經向他們的空間劃分是這樣的:

string s ="84 Chancellor place"; 
string [] words = s.Split(' '); 

問題是,(當然),它不分裂的所有字符串以同樣的方式,所以我不能總是排除來自文本其餘部分的數字(我並不總是知道數字是以文字[0]爲例,文本部分在不同的單元格中,而不是融合在一起)。

我非常感謝你的幫助,找到一種方法來提取數字。

編輯:在每個例子 期望的產出:

string1=10 string2=Downing Street 
string1=7 string2=Birch Lane 
string1=8 string2=Palm Creek Street 
string1=84 string2=Chancellor Place 
string1=56 string2=Battle on the Somme 
+0

請爲您發佈的每個示例添加所需的輸出。 – Oded

+5

「我被要求不要使用REGEX」對我來說似乎是一個愚蠢的要求,因爲它最適合這份工作。有點像要求某人搬運重物而不使用他們的手臂。 – spender

+0

@spender - 意思是,這可能是家庭作業。 – Oded

回答

2

你可以使用這個循環初始化List<Address>string.Splitint.TryParse幫助:

List<Address> addresses = new List<Address>(); 
foreach (string str in strings) 
{ 
    Address addr = new Address(); 
    addresses.Add(addr); 
    int num, numIndex = int.MinValue; 
    string[] tokens = str.Split(new[]{' '}, StringSplitOptions.RemoveEmptyEntries); 
    for (int i = 0; i < tokens.Length; i++) 
    { 
     if (int.TryParse(tokens[i], out num)) 
     { 
      addr.Number = num; 
      numIndex = i; 
      break; 
     } 
    } 
    if (addr.Number.HasValue) 
    { 
     // join the rest with white-spaces to the street name skipping the number 
     addr.Street = string.Join(" ", tokens.Where((s, i) => i != numIndex)); 
    } 
    else 
    { 
     addr.Street = str; 
    } 
} 

使用此小類:

class Address 
{ 
    public int Number { get; set; } 
    public string Street { get; set; } 
} 

DEMO

免責聲明:請注意,這不是故障安全可言,如果輸入的是任意的。世界上有很多包含數字的街道,還有像「17a」這樣的chars

相關問題