2013-10-13 48 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