2009-10-20 80 views
4

从包含字母和空格的字符串中解析整数的最有效方法是什么?从包含字母和空格的字符串中解析整数 - C#

例如: 我传递了以下字符串:“RC 272”。我想从字符串中检索272。

我正在使用C#和.NET 2.0框架。

+0

它会一直以格式字母,空格,数字吗? – Brandon 2009-10-20 17:52:10

+0

@Brandon - 是的,它将始终以这种格式。 – 2009-10-20 17:56:33

回答

9

由于字符串的格式不会改变KISS

string input = "RC 272"; 
int result = int.Parse(input.Substring(input.IndexOf(" "))); 
17

一个简单的正则表达式可以提取号码,然后你可以分析它:

int.Parse(Regex.Match(yourString, @"\d+").Value, NumberFormatInfo.InvariantInfo); 

如果字符串可以包含多个数字,你可以循环使用相同的正则表达式找到的匹配:

for (Match match = Regex.Match(yourString, @"\d+"); match.Success; match = match.NextMatch()) { 
    x = int.Parse(match.Value, NumberFormatInfo.InvariantInfo); // do something with it 
} 
+0

当我尝试构建此解决方案时出现以下错误: “对于int.Parse(字符串,System.Globalization.NumberStyles)匹配的最佳重载方法有一些无效参数” – 2009-10-20 18:04:47

+0

糟糕,抱歉。固定。 – Lucero 2009-10-20 18:07:45

+1

我不知道“简单”和“正则表达式”可以在没有语法错误的同一句子中使用。 – 2009-10-20 20:49:17

0

编辑:

如果它总是在那种格式不会像下面的工作,其中value =“RC 272”?

int someValue = Convert.ToInt32(value.Substring(value.IndexOf(' ') + 1)); 
2

如果它总是会在格式 “ABC 123”:

string s = "RC 272"; 
int val = int.Parse(s.Split(' ')[1]); // val is 272 
+1

工作,但创建两个临时字符串,其中LFSR的解决方案创建一个。 – 2009-10-20 20:48:44

1

只是为了好玩,另一种可能性:

int value = 0; 
foreach (char c in yourString) { 
    if ((c >= '0') && (c <= '9')) { 
    value = value*10+(c-'0'); 
    } 
} 
0

家伙,因为它总是会格式为“ABC 123”,为什么不跳过IndexOf步骤?

string input = "RC 272"; 
int result = int.Parse(input.Substring(3)); 
相关问题