从包含字母和空格的字符串中解析整数的最有效方法是什么?从包含字母和空格的字符串中解析整数 - C#
例如: 我传递了以下字符串:“RC 272”。我想从字符串中检索272。
我正在使用C#和.NET 2.0框架。
从包含字母和空格的字符串中解析整数的最有效方法是什么?从包含字母和空格的字符串中解析整数 - C#
例如: 我传递了以下字符串:“RC 272”。我想从字符串中检索272。
我正在使用C#和.NET 2.0框架。
由于字符串的格式不会改变KISS:
string input = "RC 272";
int result = int.Parse(input.Substring(input.IndexOf(" ")));
一个简单的正则表达式可以提取号码,然后你可以分析它:
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
}
当我尝试构建此解决方案时出现以下错误: “对于int.Parse(字符串,System.Globalization.NumberStyles)匹配的最佳重载方法有一些无效参数” – 2009-10-20 18:04:47
糟糕,抱歉。固定。 – Lucero 2009-10-20 18:07:45
我不知道“简单”和“正则表达式”可以在没有语法错误的同一句子中使用。 – 2009-10-20 20:49:17
编辑:
如果它总是在那种格式不会像下面的工作,其中value =“RC 272”?
int someValue = Convert.ToInt32(value.Substring(value.IndexOf(' ') + 1));
如果它总是会在格式 “ABC 123”:
string s = "RC 272";
int val = int.Parse(s.Split(' ')[1]); // val is 272
工作,但创建两个临时字符串,其中LFSR的解决方案创建一个。 – 2009-10-20 20:48:44
只是为了好玩,另一种可能性:
int value = 0;
foreach (char c in yourString) {
if ((c >= '0') && (c <= '9')) {
value = value*10+(c-'0');
}
}
家伙,因为它总是会格式为“ABC 123”,为什么不跳过IndexOf步骤?
string input = "RC 272";
int result = int.Parse(input.Substring(3));
它会一直以格式字母,空格,数字吗? – Brandon 2009-10-20 17:52:10
@Brandon - 是的,它将始终以这种格式。 – 2009-10-20 17:56:33