[C# 에러] Substring 에러 – “System.ArgumentOutOfRangeException” 예외 처리하는 방법


 

안녕하세요~~

 

오늘은 제가 최근에 프로그래밍을 하면서 만났던 예외가 있어서 해당 Error 예외 처리하는 방법을 알려드리고자 해요.

 

C#에서 문자열 자르는 함수인 Substring 함수 다들 아실텐데요!

 

Substring 함수를 사용하면서 실수를 많이 하는 부분이 있습니다.


 

예외 처리가 되지 않은 코드


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

 

namespace Error

{

    class Program

    {

        static void Main(string[] args)

        {

            string str = "abcdefg";

            string tmpStr = string.Empty;

 

            tmpStr = str.Substring(73);

 

            Console.WriteLine(tmpStr);

        }

    }

}

 

Colored by Color Scripter

cs


실행 결과


이처럼 System.ArgumentOutOfRangeException” 에러가 발생하게 되는데요.


이 메시지가 발생한 이유는 현재 str 변수에 총 7자리의 문자열인 “abcdefg”를 저장하고 있는데 사용자가 str 변수에서 7자리번째 이후의 3자리를 출력하려고 해서 발생하는 에러입니다.


str 변수는 총 7자리의 문자열인데 당연히 7자리 뒤의 문자가 없는데 그 문자를 출력하려니까 에러가 나는 거겠죠?

 

그래서 Substring을 사용하실 때에는 아래와 같이 Length를 이용하여 예외처리를 해주셔야 합니다.

 

예외 처리 된 소스코드


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

 

namespace Error

{

    class Program

    {

        static void Main(string[] args)

        {

            string str = "abcdefg";

            string tmpStr = string.Empty;

 

            if (str.Length >= 10)

            {

                tmpStr = str.Substring(73);

            }

            else

            {

                tmpStr = str.Substring(33);

            }

 

            Console.WriteLine(tmpStr);

        }

    }

}

 

Colored by Color Scripter

cs

 

이처럼, If문에 해당 길이의 LengthSubstring할 총 문자열의 길이 만큼의 크기가 되면 Substring 진행 하고, 그렇지 않다면 그보다 작은 크기로 문자를 자르도록 코드를 작성해 주시면 “System.ArgumentOutOfRangeException” 예외는 발생하지 않을거에요ㅎㅎ

 

실행 결과


 

다음에 또 새로운 에러를 만나게 되면 글을 쓰도록 하겠습니다~~

 

감사합니다!ㅎㅎ


728x90

이 글을 공유하기

댓글

Designed by JB FACTORY