2011-05-12 84 views
11

所以我正在嘗試做的是取一個工作號碼,看起來像這個xxx123432,並計算輸入中的數字,但不是字母。然後,我想將這些數字分配給一個變量,然後使用該變量對作業編號進行檢查,以確定它們是否處於有效格式。如何計算混合文本/數字字符串中的數字

我已經想出瞭如何執行檢查,但我不知道如何去計算工作號碼中的數字。

非常感謝您的幫助。

+0

你需要計算'1 + 2 + 3 + 4 + 3 + 2'嗎?或者統計一些數字(6)?或者是什麼? – abatishchev 2011-05-12 20:07:14

+0

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

回答

27

使用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

2

也許這樣的事情?

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)); 
4
int x = "xxx123432".Count(c => Char.IsNumber(c)); // 6 

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

這兩種方法之間的差異見Char.IsDigitChar.IsNumber

0
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

相關問題