본문 바로가기

C#/문자열

문자열을 판정하는 방법 (null 또는 빈 문자열, 시작, 포함, 조건 만족)

1. null 또는 빈 문자열 판정

 

문자열이 null인지 빈 문자열인지 조사하려면 String 클래스에 포함된 IsNullOrEmpty 메서드를 사용한다.

if(String.IsNullOrEmpty(str)) Console.WriteLine("null 또는 빈 문자열입니다.");

 

 

만일 string 변수가 null이라면 아래와 같은 코드는 System.NullReferenceException 예외가 발생하기 때문에 쓰지 않는 게 좋다.

if(str==String.Empty) Console.WriteLine("빈 문자열입니다."); //NullReferenceException 발생할 수 있는 코드

 

 

.NET 프레임워크 4 이후에는 빈 문자로만 구성된 문자열도 판정의 대상에 포함하고 싶다면 IsNullOrWhiteSpace 메서드를 사용하면 된다.

if(String.IsNullOrWhiteSpace(str))    //null, "", "  " 모두가 true가 된다.

 

2. 지정한 부분 문자열로 시작되는지, 나는지 판정

 

StartsWith 메서드를 사용하면 인수에 전달된 부분 문자열로 시작되는지 여부를 조사할 수 있다.

IndexOf 메서드를 사용해도 같은 결과를 얻을 수 있는데 StartsWith를 사용하는 편이 '무엇을 하고 싶은 것인가'라는 의도를 코드에서 명확하게 보여줄 수 있다.

//문자열 str이 'Visual'로 시작되는지 조사한다
if(str.StarsWith("Visual")) Console.WriteLine("Visual로 시작됩니다.");

 

EndsWith라는 메서드는 해당 문자열이 인수로 전달된 부분 문자열로 끝나는지 조사할 수 있다.

if(str.EndsWith("Exception")) Console.WriteLine("Exception로 끝납니다.");

 

3. 지정한 부분 문자열이 포함돼 있는 판정

 

해당 문자열 안에 인수로 전달받은 부분 문자열이 포함돼 있는지 조사하려면 Contains 메서드를 사용하면 된다.

if(str.Contains("Studio")) Console.WriteLine("Studio가 포함돼 있습니다.");

 

4. 지정한 문자가 포함돼 있는지 판정

 

String 클래스는 IEnumerable<char> 인터페이스를 구현하므로 LINQ에 있는 Contains 메서드를 사용해 아래와 같이 사용할 수 있다.

using System.Linq;
...
var target = "The quick brown fox jumps over the lazy dog.";
//지정한 문자가 포함돼 있는지 판정
var contains = target.Contains('z');

 

5. 조건을 만족하는 문자가 포함돼 있는지 판정

 

LINQ에 있는 Any 메서드를 사용하면 어떤 조건을 만족하는 문자가 포함돼 있는지 조사할 수 있다.

var target = "The quick brown fox jumps over the lazy dog.";
var isExists = target.Any(c => Char.IsLower(c));

Any 메서드에 인수로 넘겨준 람다식의 결과 중에 하나라도 true를 반환하면 Any 메서드는 true를 반환한다.

true를 반환한 시점에서 문자열을 조사하는 작업은 중단된다.

 

6. 모든 문자가 조건을 만족하는지 판정

 

LINQ에 있는 All 메서드를 사용하면 모든 문자가 해당 조건을 만족하는지 조사할 수 있다.

var target = "1234";
//Char 구조체를 통해 IsDigit라는 정적 메서드를 사용해서 해당 문자열이 숫자인지 여부를 조사
var isAllDigits = target.All(c => Char.IsDigit(c));

위 예에서 target 문자열 안에 있는 문자는 모두 숫자이므로 bool 변수에는 true가 대입된다.