1. Parse() method
Parse() 메서드는 모든 기본 데이터 유형에 사용할 수 있고 문자열에서 정수로 변환하는 가장 쉬운 방법이다.
Parse 메서드는 16, 32, 64비트 부호 있는 정수 유형에 사용할 수 있다.
- Int16.Parse()
- Int32.Parse()
- Int64.Parse()
Parse(string s)
Parse(string s, numberstyle style)
Parse(String s, NumberStyles style, IFormatProvider provider)
Parse() 메소드는 최대 3개의 매개변수가 필요하다.
첫 번째 매개변수에는 문자열을 정수 형식으로 변환하는 데 필수인 문자열, 두 번째 매개변수에는 표시할 숫자의 스타일을 지정하는 숫자 스타일이 포함되고 세 번째 매개변수는 문자열 문화별 형식을 나타낸다.
Int16.Parse("100"); // returns 100
Int16.Parse("(100)", NumberStyles.AllowParentheses); // returns -100
int.Parse("30,000", NumberStyles.AllowThousands, new CultureInfo("en-au"));// returns 30000
int.Parse("$ 10000", NumberStyles.AllowCurrencySymbol); //returns 10000
int.Parse("-100", NumberStyles.AllowLeadingSign); // returns -100
int.Parse(" 100 ", NumberStyles.AllowLeadingWhite | NumberStyles.AllowTrailingWhite); // returns 100
Int64.Parse("2147483649"); // returns 2147483649
위의 예에서 볼 수 있듯이 유효한 숫자 문자열은 정수로 변환될 수 있다.
Parse() 메서드를 사용하면 NumberStyles 열거형을 사용하여 숫자 문자열을 다른 형식으로 정수로 변환할 수 있다.
그러나 전달된 문자열은 유효한 숫자 문자열이거나 호출되는 유형의 범위에 있어야 합니다.
다음 예시문은 예외가 발생한다.
int.Parse(null);//thows FormatException
int.Parse("");//thows FormatException
int.Parse("100.00"); // throws FormatException
int.Parse( "100a"); //throws formatexception
int.Parse(2147483649);//throws overflow exception use Int64.Parse()
장점
- 유효한 숫자 문자열을 정수 값으로 변환한다.
- 다양한 숫자 스타일을 지원한다.
- 문화권별 사용자 지정 형식을 지원한다.
단점
- 입력 문자열은 유효한 숫자 문자열이어야 한다.
- 숫자 문자열은 메서드가 호출되는 int 유형 범위 내에 있어야 한다.
- null 또는 잘못된 숫자 문자열 변환 시 예외가 발생한다.
2. Convert class
문자열을 정수로 변환하는 또 다른 방법은 정적 변환 클래스를 사용하는 것이다.
Convert 클래스에는 기본 데이터 형식을 다른 기본 데이터 형식으로 변환하는 다양한 메서드가 포함되어 있다.
Convert 클래스에는 다양한 데이터 유형에서 int 유형으로 변환하는 다음 메소드가 포함되어 있다.
- Convert.ToInt16()
- Convert.ToInt32()
- Convert.ToInt64()
Convert.ToInt16()는 16비트 정수(e.g. short)를, Convert.ToInt32()는 32비트 정수(e.g. int)를, 그리고 Convert.ToInt64()는 64비트 정수(e.g. long)를 반환한다.
Convert.ToInt16("100"); // returns short
Convert.ToInt16(null);//returns 0
Convert.ToInt32("233300");// returns int
Convert.ToInt32("1234",16); // returns 4660 - Hexadecimal of 1234
Convert.ToInt64("1003232131321321");//returns long
// the following throw exceptions
Convert.ToInt16("");//throws FormatException
Convert.ToInt32("30,000"); //throws FormatException
Convert.ToInt16("(100)");//throws FormatException
Convert.ToInt16("100a"); //throws FormatException
Convert.ToInt16(2147483649);//throws OverflowException
장점
- 모든 데이터 유형에서 정수로 변환한다.
- null을 0으로 변환하므로 예외가 발생하지 않는다.
단점
- 입력 문자열은 유효한 숫자 문자열이어야 하며 다른 숫자 형식을 포함할 수 없고 유효한 정수 문자열에서만 작동한다.
- 입력 문자열은 호출된 IntXX 메서드의 범위 내에 있어야 한다. (e.g. Int16, Int32, Int64)
- 입력 문자열은 괄호, 쉼표 등을 포함할 수 없다.
- 다른 정수 범위에 대해서는 다른 방법을 사용해야 한다. (e.g. "32767"보다 높은 정수 문자열에 대해서는 Convert.ToInt16()을 사용할 수 없다.)
3. TryParse() method - Recommended
모든 기본 유형에 대해 TryParse() 메서드를 사용하여 문자열을 호출 데이터 유형으로 변환할 수 있다.
문자열을 정수로 변환하는 데 권장되는 방법이다.
TryParse() 메서드는 모든 정수 유형에 대해 TryParse() 메서드를 사용할 수 있고, 숫자의 문자열 표현을 해당하는 16, 32 및 64비트 부호 있는 정수로 변환한다.
변환 성공 또는 실패 여부를 나타내는 부울을 반환하므로 예외가 발생하지 않는다.
- Int16.TryParse()
- Int32.TryParse()
- Int64.TryParse()
bool Int32.TryParse(string s, out int result)
bool Int32.TryParse(string s, NumberStyle style, IFormatProvider provider, out int result)
TryParse() 메서드는 Parse() 메서드와 동일한 3개의 매개 변수를 가지고, 그 기능도 같다.
string numberStr = "123456";
int number;
bool isParsable = Int32.TryParse(numberStr, out number);
if (isParsable)
Console.WriteLine(number);
else
Console.WriteLine("Could not be parsed.");
출력 결과: 123456
string numberStr = "123456as";
int number;
bool isParsable = Int32.TryParse(numberStr, out number);
if (isParsable)
Console.WriteLine(number);
else
Console.WriteLine("Could not be parsed.");
출력 결과: Could not be parsed.
위의 예에서 numberStr = "123456as"는 잘못된 숫자 문자열이지만 Int32.TryParse() 메서드는 예외를 발생하는 대신 false를 반환한다.
따라서 TryParse() 메서드는 문자열이 유효한 숫자 문자열인지 여부를 모를 때 숫자 문자열을 정수 유형으로 변환하는 가장 안전한 방법이다.
장점
- 다른 숫자 문자열을 정수로 변환한다.
- 다른 숫자 스타일의 문자열 표현을 변환한다.
- 문화권별 숫자 문자열을 정수로 변환한다.
- 절대 예외를 던지지 않고 정수로 구문 분석할 수 없으면 false를 반환한다.
단점
- out 매개변수를 사용해야 한다.
- 단일 메서드 호출 대신 더 많은 코드 줄을 작성해야 한다.
↓ 참고 사이트
https://www.tutorialsteacher.com/articles/convert-string-to-int
'Study > C#' 카테고리의 다른 글
[C#] Array와 String에서 IndexOf 사용하기 (0) | 2021.09.22 |
---|---|
[C#] 배열에 값을 포함하는지 확인하는 방법 (0) | 2021.09.20 |