2011-05-12 5 views
11

그래서 내가하려고하는 것은이 xxx123432처럼 보이는 작업 번호를 취하고 항목의 자릿수를 계산하지만 문자는 계산하지 않습니다 . 그런 다음 숫자를 변수에 할당하고 해당 변수를 사용하여 작업 번호를 검사하여 올바른 형식인지 확인합니다.어떻게 혼합 된 텍스트/숫자의 문자열에서 숫자를 셀 수 있습니까?

나는 수표를 수행하는 방법을 이미 알고 있지만 취업 번호의 숫자를 계산하는 방법에 대한 실마리는 없습니다.

도움을 주셔서 대단히 감사드립니다.

+0

'1 + 2 + 3 + 4 + 3 + 2'를 계산해야합니까? 아니면 숫자를 세어 본다 (6)? 또는 무엇을? – abatishchev

+0

숫자의 수를 계산해야합니다. – OneFreeFitz

답변

27

LINQ :

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

또는

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

@ mathieu- 구문 외에도,이 두 가지의 실제 차이점은 무엇입니까? – MAW74656

+0

@ MAW74656 : 아무런 동작 상 차이가 없습니다. 첫 번째 것은 선언 된 술어를 사용합니다 (즉, char 형의 1 arg를 취해 bool을 반환하는 함수). 두 번째 함수는 직접 함수를 사용합니다. – mathieu

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)); 

이렇게하면 필요한 경우 num 234가 출력됩니다.

다른 linq/lambda 변종은 "B2B_MESSAGE_12344"와 같은 문자열이 있으면 B2B에서 2를 계산하므로 완전히 맞지 않는 문자를 포함합니다.

하지만 숫자가 의미하는 바를 정확히 이해했는지는 확실하지 않습니다. 숫자의 수 (다른 답변) 또는 숫자가 나타내는 숫자 (이 대답)입니까?

+0

나는 그것에 대해 더 분명히해야합니다. 나는 숫자의 수를 찾고 있었지만 어쨌든 당신의 대답에 감사드립니다. – OneFreeFitz

관련 문제