如何从包含字母和空格的字符串中有效地解析出整数?
例如:我传递了以下字符串:“RC 272”。我想从字符串中检索出272。
我正在使用C#和.NET 2.0框架。
一个简单的正则表达式可以提取数字,然后你可以解析它:
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
}
indexof
或 split
的解决方案更能捕捉到意图,并且它允许通过不匹配模式(通过 match.Success
属性)来更好地处理问题(无效的输入数据),而不是在处理过程中导致无效索引或解析错误。 (抱歉第二条评论,我在第一条评论中用完了字符限制;)) - LuceroSplit()
函数,我猜测我提出的“其他”解决方案在这方面可能表现良好。 - Lucero因为字符串的格式不会改变,所以要遵循KISS原则:
string input = "RC 272";
int result = int.Parse(input.Substring(input.IndexOf(" ")));
仅仅是为了好玩,还有另一种可能性:
int value = 0;
foreach (char c in yourString) {
if ((c >= '0') && (c <= '9')) {
value = value*10+(c-'0');
}
}
string s = "RC 272";
int val = int.Parse(s.Split(' ')[1]); // val is 272
编辑:
如果它始终保持这种格式,那么类似以下的代码是否可行,其中value =“RC 272”?
int someValue = Convert.ToInt32(value.Substring(value.IndexOf(' ') + 1));
string input = "RC 272";
int result = int.Parse(input.Substring(3));