본문 바로가기

C#/문자열

(8)
지정한 서식에 여러 개의 변수를 적용하여 문자열 생성 지정한 서식에 여러 개의 변수를 적용하고 싶을 때도 String.Format 메서드를 사용하면 편리하다. “Company=SAMSUNG;Item=Note9” company 변수에 “SAMSUNG”, item 변수에 “Note9”이 들어 있다고 가정하면 String.Format 메서드를 사용해 다음과 같이 작성할 수 있다. var phone = String.Format(“Company={0};Item={1}”, company , item); ‘+’ 연산자를 사용해서 작성한 것보다는 이 방법이 좋다. C#6.0에서는 문자열 보간 구문을 사용해 다음과 같이 작성할 수 도 있다. var bookline = $”Company={company};Item={item}”; String.Format 메서드에서는 중괄호 ..
문자 배열로 문자열 생성 문자 배열로 문자열을 만들려면 string 있는 생성자 중에서 문자 배열을 받는 것을 사용한다. var chars = new char[] { 'P', 'r', 'o', }; //"Pro"가 str변수에 대입 var str = new string(chars); 특정 문자열에서 '=' 기호의 오른쪽을 추출해서 새로운 문자열로 만드는 방법. var target = "Company\t=\tSAMSUNG"; var chars = target.SkipWhile(c => c != '=') .Skip(1) .Where(c => !char.IsWhiteSpace(c)) .ToArray(); var str = new string(chars); 위의 코드에서는 먼저 LINQ에 있는 SkipWhile 메서드와 Skip 메서드..
StringBuilder를 사용해 문자열 연결 문자열은 변하지 않는 객체이다. 일단 생성된 문자열은 두 번 다시 수정할 수 없다. 문자열이 변하지 않는 객체라는 사실은 안전이 확보된다는 관점에서 매우 좋은 일이지만 연결, 문자삽입, 문자 삭제와 같은 처리를 하려면 그때마다 새로운 인스턴스가 생성되므로 프로그램의 성능에 좋지 않은 영향을 준다. var str = "ABC"; str = str + "XYZ"; 문자열은 변하지 않는 객체이므로 기존 객체 "ABC" 뒤에 추가할 수 없다. 그래서 위와같은 코드가 실행되면 기존 객체 "ABC"는 더 이상 사용되지 않는 문자열이되고 새로 6자 만큼의 영역이 확보되고 거기에 "ABC"가 복사된 후 "XYZ"가 복사된다. 비효율적인 코드를 작성하지 않기 위해 .NET 프레임워크에는 StringBuilder라는 클래..
지정한 문자로 문자열을 분할 (Split 메서드) Split 메서드를 사용하면 지정한 문자로 해당 문자열을 분할할 수 있다. var text = “The quick brown fox jumps over the lazy dog”; //공백이 있는 곳을 나눠서 단어를 추출. 하나하나의 단어로 분할되어 words 배열에 저장된다. string[] words = text.Split(' '); 만약 마지막에 마침표가 붙으면 마지막에 "dog."가 저장될 것이다. 마침표를 없애고 "dog"라는 단어를 만들고 싶다면 아래와 같이 오버로드된 또 하나의 Split 메서드를 사용한다. var text = "The quick brown fox jumps over the lazy dog."; //' '과 '.'를 구분에 사용할 문자로 지정 //구분 문자만 지정하면 words..
문자열의 변환(공백 제거, 임의 개수의 문자 삭제, 삽입, 치환, 대소문자 변환) 1. 문자열의 앞뒤에 있는 공백 제거 문자열의 앞뒤에 있는 공백을 삭제하려면 Trim 메서드를 사용한다. var target = " non-whitespace string "; var replaced = target.Trim(); Console.WrtieLine("[{0}]", replaced); 실행결과 [non-whitespace string] Trim 메서드를 실행한다고 바로 적용되지 않는다. 대입하는 과정이 필요하다. target.Trim(); (X) target = target.Trim(); (O) TrimStart 메서드와 TrimEnd 메서드를 사용하면 앞이나 뒤 중에 한쪽에 있는 공백만 삭제할 수 있다. 2. 지정한 위치부터 임의 개수의 문자 삭제 Remove 메서드를 사용하면 지정한 위치..
문자열을 검색하고 추출하는 방법 1. 부분 문자열을 검색하고 위치를 구하는 방법 IndexOf 메서드는 인수로 전달받은 부분 문자열이 문자열 안에서 처음 발견된 위치(0에서 시작하는 인덱스로 표시)를 반환한다. var target = "Name=Note9;Company=SAMSUNG"; var index = target.IndexOf("Company="); "Company="가 있는 위치(0에서 시작함)를 구한다. index에는 11이 대입된다. SubString, Remove, Insert처럼 인덱스를 인수로 받는 메서드를 호출할 때 이 IndexOf 메서드를 이용하게 된다. 2. 문자열의 일부를 추출하는 방법 아래는 문자열의 일부를 추출하는 코드이다. var target = "Name=Note9;Company=SAMSUNG"; va..
문자열을 판정하는 방법 (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 이후에는 빈 문자로만 구성된 문자열도 판정의 대상에 포함하고 싶다면 IsNullOrWhi..
C# string의 기본적인 특징 string은 메모리상 heap에 저장되는 참조(reference) 타입이다. 참조 타입인 string은 다른 참조타입과 다르게 조금 특이한 특성이 있다. 먼저 일반적인 참조타입의 '대입'과 '비교' 시 특징을 알아보자. 1. 참조타입의 대입 참조타입은 대입시 값이 복사되는 것이 아니라 데이터를 참조하는 참조자가 하나 더 늘어날 뿐 별도의 메모리가 추가 할당되는 것은 아니다. 2. 참조타입의 비교 참조타입을 비교할 시 heap의 번지를 비교하기 때문에 내용이 완전히 같아도 위치가 다르면 같지 않은 것으로 판단한다. 이런 일반적인 참조타입과 다르게 string의 '대입'과 '비교'는 특이하게 동작한다. 1. string의 대입 string은 읽기 전용이다. 따라서 대입 시 내용이 바뀌는 것이 아니라 아예 ..