2009-10-20 5 views
4

글자와 공백이 포함 된 문자열에서 정수를 파싱하는 가장 효율적인 방법은 무엇입니까?글자와 공백이 포함 된 문자열의 정수를 파싱합니다. - C#

예 : 다음 문자열이 전달되었습니다. "RC 272". 문자열에서 272를 가져 오려고합니다.

저는 C#과 .NET 2.0 프레임 워크를 사용하고 있습니다.

+0

항상 글자, 공백, 숫자 형식이 맞습니까? – Brandon

+0

@Brandon - 그렇습니다. 항상 그렇습니다. –

답변

9

문자열의 형식이 KISS을 변경하지 않습니다 이후 :

string input = "RC 272"; 
int result = int.Parse(input.Substring(input.IndexOf(" "))); 
17

간단한 정규식 수를 추출 할 수 있습니다, 그리고 당신이 그것을 구문 분석 할 수 있습니다 : 문자열이 여러 개 포함 할 수 있습니다 경우

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 
} 
+0

이 솔루션을 빌드 할 때 다음 오류가 발생합니다. "int.Parse (string, System.Globalization.NumberStyles)에 가장 적합한 오버로드 메서드가 일부 잘못된 인수가 있습니다." –

+0

죄송합니다. 결정된. – Lucero

+1

"단순"과 "정규식"이 문법 오류없이 같은 문장에서 사용될 수 있다는 것을 몰랐습니다. –

0

편집 :

만약 항상 그 형식으로되어 있다면 value = "RC 272"와 같은 어떤 작업을하지 않을까요? 그냥 재미, 또 다른 가능성에 대한

string s = "RC 272"; 
int val = int.Parse(s.Split(' ')[1]); // val is 272 
2

int value = 0; 
foreach (char c in yourString) { 
    if ((c >= '0') && (c <= '9')) { 
    value = value*10+(c-'0'); 
    } 
} 
+1

작동하지만 두 개의 임시 문자열을 생성합니다. LFSR의 솔루션은 단 하나만 생성합니다. –

1

: 항상 형식 "ABC 123"에있을 경우

int someValue = Convert.ToInt32(value.Substring(value.IndexOf(' ') + 1)); 
0

얘들 아, 이후 항상 것입니다 "ABC 123"형식이어야합니다. 왜 IndexOf 단계를 건너 뛰지 않으십니까?

string input = "RC 272"; 
int result = int.Parse(input.Substring(3)); 
관련 문제