如何计算混合文本/数字字符串中的数字

问题描述:

所以我正在尝试做的是取一个工作号码,看起来像这个xxx123432,并计算输入中的数字,但不是字母。然后,我想将这些数字分配给一个变量,然后使用该变量对作业编号进行检查,以确定它们是否处于有效格式。如何计算混合文本/数字字符串中的数字

我已经想出了如何执行检查,但我不知道如何去计算工作号码中的数字。

非常感谢您的帮助。

+0

你需要计算'1 + 2 + 3 + 4 + 3 + 2'吗?或者统计一些数字(6)?或者是什么? – abatishchev 2011-05-12 20:07:14

+0

我需要计算数字的数量。 – OneFreeFitz 2011-05-12 20:12:45

使用LINQ:

var count = jobId.Count(x => Char.IsDigit(x)); 

var count = jobId.Count(Char.IsDigit); 
+0

@ mathieu-除了语法,这两者之间真正的区别是什么? – MAW74656 2012-04-18 17:32:26

+0

@ MAW74656:没有行为差异。第一个使用一个声明的谓词(即一个函数,该函数接受一个char类型的arg并返回bool),第二个直接使用函数 – mathieu 2012-04-19 07:41:06

也许这样的事情?

string jobId = "xxx123432"; 
int digitsCount = 0; 
foreach(char c in jobId) 
{ 
    if(Char.IsDigit(c)) 
    digitsCount++; 
} 

而且你可以使用LINQ,像这样:

string jobId = "xxx123432"; 
int digitsCount = jobId.Count(c => char.IsDigit(c)); 

int x = "xxx123432".Count(c => Char.IsNumber(c)); // 6 

int x = "xxx123432".Count(c => Char.IsDigit(c)); // 6 

这两种方法之间的差异见Char.IsDigitChar.IsNumber

string str = "t12X234"; 
    var reversed = str.Reverse().ToArray(); 
    int digits = 0; 

    while (digits < str.Length && 
      Char.IsDigit(reversed[digits])) digits++; 

    int num = Convert.ToInt32(str.Substring(str.Length - digits)); 

这给出了数字234作为输出,如果这是你所需要的。

其他linq/lambda变体只计算我认为不完全正确的字符,如果你有像“B2B_MESSAGE_12344”这样的字符串,因为它会计算B2B中的2。

但我不确定我是否正确理解了多少数字意味着什么。是数字的计数(其他答案)还是数字形成的数字(本答案)。

+0

我想我应该更清楚一点。我正在寻找数字的计数,但感谢您的答案。 – OneFreeFitz 2011-05-13 13:33:31