-4

如何获得字符串中最长数字后缀所代表的数字,代码可读,而无需编写编程竞赛风格的算法?

例如

GetNumericalSuffix("Number=350") => 350, 
"Num-30" => 30
"My21" => 21

等等

4

5 回答 5

6
var result = int.Parse(new string(input.Reverse()
                                       .TakeWhile(char.IsDigit)
                                       .Reverse()
                                       .ToArray()));
于 2013-06-26T08:51:42.500 回答
3

简单的回答:

var x = "various text 1234";
var digits = x.Reverse().TakeWhile(c => char.IsDigit(c));
var number = new string(digits.Reverse().ToArray());
于 2013-06-26T08:51:16.887 回答
3
public static int GetNumericalSuffix(string str)
{
    Match match = Regex.Match(str, "[^0-9]*([0-9]+)$");
    if (!match.Success)
        return -1;
    return int.Parse(match.Groups[1].Value);
}
于 2013-06-26T08:49:05.253 回答
0

你可以用这样的正则表达式来做到这一点:

MatchCollection m = Regex.Matches("Number=350", "\\d+");
int biggestMatch = 0;
foreach (Match match in m)
{
   if (int.Parse(match.Value) > biggestMatch)
   {
      biggestMatch = int.Parse(match.Value);
   }
}
于 2013-06-26T08:51:31.680 回答
0

下面的想法,自己编码:

  1. 将字符串读取为 char 数组,逐个字符
  2. 如果Char.IsDigit(currentChar)- 开始填充另一个 char 数组 -numericChars
  3. 何时Char.IsDigit() == false- 从创建字符串numericChars,然后执行Int32.TryParse()
  4. 将数字存储在List<int>解析的数字中

最后你会得到一个所有找到的数字的列表,只要找到最大的一个。

于 2013-06-26T08:48:08.123 回答