글자와 공백이 포함 된 문자열에서 정수를 파싱하는 가장 효율적인 방법은 무엇입니까?글자와 공백이 포함 된 문자열의 정수를 파싱합니다. - C#
예 : 다음 문자열이 전달되었습니다. "RC 272". 문자열에서 272를 가져 오려고합니다.
저는 C#과 .NET 2.0 프레임 워크를 사용하고 있습니다.
글자와 공백이 포함 된 문자열에서 정수를 파싱하는 가장 효율적인 방법은 무엇입니까?글자와 공백이 포함 된 문자열의 정수를 파싱합니다. - C#
예 : 다음 문자열이 전달되었습니다. "RC 272". 문자열에서 272를 가져 오려고합니다.
저는 C#과 .NET 2.0 프레임 워크를 사용하고 있습니다.
문자열의 형식이 KISS을 변경하지 않습니다 이후 :
이string input = "RC 272";
int result = int.Parse(input.Substring(input.IndexOf(" ")));
간단한 정규식 수를 추출 할 수 있습니다, 그리고 당신이 그것을 구문 분석 할 수 있습니다 : 문자열이 여러 개 포함 할 수 있습니다 경우
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
}
이 솔루션을 빌드 할 때 다음 오류가 발생합니다. "int.Parse (string, System.Globalization.NumberStyles)에 가장 적합한 오버로드 메서드가 일부 잘못된 인수가 있습니다." –
죄송합니다. 결정된. – Lucero
"단순"과 "정규식"이 문법 오류없이 같은 문장에서 사용될 수 있다는 것을 몰랐습니다. –
편집 :
만약 항상 그 형식으로되어 있다면 value = "RC 272"와 같은 어떤 작업을하지 않을까요? 그냥 재미, 또 다른 가능성에 대한
string s = "RC 272";
int val = int.Parse(s.Split(' ')[1]); // val is 272
int value = 0;
foreach (char c in yourString) {
if ((c >= '0') && (c <= '9')) {
value = value*10+(c-'0');
}
}
작동하지만 두 개의 임시 문자열을 생성합니다. LFSR의 솔루션은 단 하나만 생성합니다. –
: 항상 형식 "ABC 123"에있을 경우
int someValue = Convert.ToInt32(value.Substring(value.IndexOf(' ') + 1));
얘들 아, 이후 항상 것입니다 "ABC 123"형식이어야합니다. 왜 IndexOf 단계를 건너 뛰지 않으십니까?
string input = "RC 272";
int result = int.Parse(input.Substring(3));
항상 글자, 공백, 숫자 형식이 맞습니까? – Brandon
@Brandon - 그렇습니다. 항상 그렇습니다. –