2013-10-13 47 views
-1

考慮下面的2串,我怎麼能得到從每一個出現的第一個整數,而無需使用正則表達式提取第一個整數:C#從字符串

"Result Set 25: 171 companies" => get 25 
"Other Text 22 : 140 companies" => get 22 
+0

@LexRema爲什麼非正則表達式的要求? –

+0

個人喜好,但罰款我只是留下評論來說清楚。去吧。如果有一個簡潔的無正則表達式的解決方案將接受該 – parliament

+1

我們不會「去爲它」。你爲什麼不給它一個鏡頭呢? –

回答

11

您可以使用LINQ找到的數字

var digits = input.SkipWhile(c => !Char.IsDigit(c)) 
    .TakeWhile(Char.IsDigit) 
    .ToArray(); 

var str = new string(digits); 
int i = int.Parse(str); 

您可能要檢查所生成的字符串的第一個序列是非空嘗試解析它來檢查有輸入任何數字之前。

+2

請記住,Char.IsDigit也會返回true,例如9的Unicode數字,其中'int.Parse'將被拒絕,所以最好明確檢查'c> ='0'&& c <='9''。 –

2
var result = new string(input.SkipWhile(x=>!char.IsDigit(x)) 
          .TakeWhile(char.IsDigit).ToArray()); 
//You can apply int.Parse() on the result 
0

不太確定它的效率如何,但這是我在沒有RegEX的情況下可以創造的最佳效果。

string a = "Result Set 25: 171 companies"; 
string b = string.Empty; 
int val; 
for (int i = 0; i < a.Length; i++) 
{ 
    if (Char.IsDigit(a[i])) 
     b += a[i]; 
    else if (b.Length != 0) 
     break; 
} 
if (b.Length > 0) 
val = int.Parse(b); 

基於在Find and extract a number from a string