언어 자료구조 알고리즘/C# 언어 문법

9.String

언제나휴일 2009. 8. 19. 05:47
반응형
String

다루는 내용

 - String의 멤버

 - StringBuilder

 

String은 Char개체의 읽기 전용 컬렉션으로 저장이 되며 각 컬렉션은 UTF-16으로 인코딩된 유니코드 문자 하나이다.

String클래스는 C및 C++과 달리 안전한 작성 및 조작, 비교를 할 수 있다는 특징이 있다.

또한 string이라는 별칭으로도 사용이 가능하며 개별 유니코드 포인터에 액세스를 하기 위해  StringInfo개체를 사용할 수도 있다.

 

고려해야 할 점은 String 개체는 읽기 전용 컬렉션이기 때문에 수정이 불가능하며 수정하는 것처럼 보이는 메소드를 포함을 하고 있어서 해당 메소드 수행 후 수정된 String개체를 반환하고 있다.  즉, 반환되는 것은 새로운 String개체이고 기존 개체는 GC에 의해 수집 대상이 된다.  만약, 이러한 오버헤드를 줄이기를 원한다면 StringBuilder클래스를 사용하면 된다. 

 

String의 초기화  

 
Look & Feel & Think  

목적에 따라 초기화를 null로 하는 것이 바람직한 경우도 있지만 System.String.Empty로 초기화를 하는 것이 나은 경우도 있을 것이다.             

 

 StringBuilder

StringBuilder는 변경할 수 있는 문자 시퀀스를 값으로 갖고 있고 내부적으로 추가, 제거, 교체 및 삽입 동작을 하기 때문에 많은 경우에 String클래스에 비해 오버헤드가 적을 수 있다.  MSDN에서는 고정된 수로 구성된 문자열을 사용할 때는 String클래스를 사용하고 사용자 입력 문자열처럼 임의의 개수로 구성된 문자열을 사용할 때는 StringBuilder를 사용하는 것이 적합하다고 명시되어 있다.

 

 

 문자열 비교

String에는 문자열을 비교하기 위한 Compare, CompareOriginal, CompareTo, Equals, EndsWidth, StartsWith 메소드를 제공하고 있다. 

 

 

 문자열 부분 요소 위치 

String에는 문자열 부분 요소 위치를 찾기 위해 IndexOf, IndexOfAny, LastIndexOf, LastIndexOfAny 메소드를  제공하고 있다. 

LastIndexOf, LastIndexOfAny는 뒤에서부터 찾는 메소드 들이다.

 

다음은 IndexOf 메소드의 사용 예이다.

 

다음은 IndexOfAny메소드의 사용 예이다.

 

이 외에도 String 클래스에는 목적에 따른 다양한 메소드를 제공하고 있다.

참고) Length멤버 속성을 통해 char 개수를 얻을 수 있다.

String 기타 메소드

복사

Copy , CopyTo

결합,분리

Join, Substring, Split, Concat

수정

Insert , Replace , Remove , PadLeft , PadRight , Trim , TrimEnd, TrimStart

대/소변경

ToLower, ToLowerInvariant, ToUpper, ToUpperInvariant

정규화확인

IsNormalized 

정규화문자열생성

Normalize

 

그리고, static 메소드인 Format을 사용하면 쉽게 원하는 포맷의 문자열을 생성할 수 있다.

[발췌]MSDN

// This code example demonstrates the String.Format() method.
// Formatting for this example uses the "en-US" culture.

using System;
class Sample
{
    enum Color {Yellow = 1, Blue, Green};
    static DateTime thisDate = DateTime.Now;

    public static void Main()
    {
// Store the output of the String.Format method in a string.
    string s = "";

    Console.Clear();

// Format a negative integer or floating-point number in various ways.
    Console.WriteLine("Standard Numeric Format Specifiers");
    s = String.Format(
        "(C) Currency: . . . . . . . . {0:C}\n" +
        "(D) Decimal:. . . . . . . . . {0:D}\n" +
        "(E) Scientific: . . . . . . . {1:E}\n" +
        "(F) Fixed point:. . . . . . . {1:F}\n" +
        "(G) General:. . . . . . . . . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(N) Number: . . . . . . . . . {0:N}\n" +
        "(P) Percent:. . . . . . . . . {1:P}\n" +
        "(R) Round-trip: . . . . . . . {1:R}\n" +
        "(X) Hexadecimal:. . . . . . . {0:X}\n",
        -123, -123.45f);
    Console.WriteLine(s);

// Format the current date in various ways.
    Console.WriteLine("Standard DateTime Format Specifiers");
    s = String.Format(
        "(d) Short date: . . . . . . . {0:d}\n" +
        "(D) Long date:. . . . . . . . {0:D}\n" +
        "(t) Short time: . . . . . . . {0:t}\n" +
        "(T) Long time:. . . . . . . . {0:T}\n" +
        "(f) Full date/short time: . . {0:f}\n" +
        "(F) Full date/long time:. . . {0:F}\n" +
        "(g) General date/short time:. {0:g}\n" +
        "(G) General date/long time: . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(M) Month:. . . . . . . . . . {0:M}\n" +
        "(R) RFC1123:. . . . . . . . . {0:R}\n" +
        "(s) Sortable: . . . . . . . . {0:s}\n" +
        "(u) Universal sortable: . . . {0:u} (invariant)\n" +
        "(U) Universal full date/time: {0:U}\n" +
        "(Y) Year: . . . . . . . . . . {0:Y}\n",
        thisDate);
    Console.WriteLine(s);

// Format a Color enumeration value in various ways.
    Console.WriteLine("Standard Enumeration Format Specifiers");
    s = String.Format(
        "(G) General:. . . . . . . . . {0:G}\n" +
        "    (default):. . . . . . . . {0} (default = 'G')\n" +
        "(F) Flags:. . . . . . . . . . {0:F} (flags or integer)\n" +
        "(D) Decimal number: . . . . . {0:D}\n" +
        "(X) Hexadecimal:. . . . . . . {0:X}\n",
        Color.Green);      
    Console.WriteLine(s);
    }
}
/*
This code example produces the following results:

Standard Numeric Format Specifiers
(C) Currency: . . . . . . . . ($123.00)
(D) Decimal:. . . . . . . . . -123
(E) Scientific: . . . . . . . -1.234500E+002
(F) Fixed point:. . . . . . . -123.45
(G) General:. . . . . . . . . -123
    (default):. . . . . . . . -123 (default = 'G')
(N) Number: . . . . . . . . . -123.00
(P) Percent:. . . . . . . . . -12,345.00 %
(R) Round-trip: . . . . . . . -123.45
(X) Hexadecimal:. . . . . . . FFFFFF85

Standard DateTime Format Specifiers
(d) Short date: . . . . . . . 6/26/2004
(D) Long date:. . . . . . . . Saturday, June 26, 2004
(t) Short time: . . . . . . . 8:11 PM
(T) Long time:. . . . . . . . 8:11:04 PM
(f) Full date/short time: . . Saturday, June 26, 2004 8:11 PM
(F) Full date/long time:. . . Saturday, June 26, 2004 8:11:04 PM
(g) General date/short time:. 6/26/2004 8:11 PM
(G) General date/long time: . 6/26/2004 8:11:04 PM
    (default):. . . . . . . . 6/26/2004 8:11:04 PM (default = 'G')
(M) Month:. . . . . . . . . . June 26
(R) RFC1123:. . . . . . . . . Sat, 26 Jun 2004 20:11:04 GMT
(s) Sortable: . . . . . . . . 2004-06-26T20:11:04
(u) Universal sortable: . . . 2004-06-26 20:11:04Z (invariant)
(U) Universal full date/time: Sunday, June 27, 2004 3:11:04 AM
(Y) Year: . . . . . . . . . . June, 2004

Standard Enumeration Format Specifiers
(G) General:. . . . . . . . . Green
    (default):. . . . . . . . Green (default = 'G')
(F) Flags:. . . . . . . . . . Green (flags or integer)
(D) Decimal number: . . . . . 3
(X) Hexadecimal:. . . . . . . 00000003

*/

 

반응형

'언어 자료구조 알고리즘 > C# 언어 문법' 카테고리의 다른 글

14.정적 클래스 및 정적 멤버  (0) 2009.08.19
13.메소드  (0) 2009.08.19
12. 속성(Property)  (0) 2009.08.19
11.Class  (0) 2009.08.19
10.Casting  (0) 2009.08.19
8. Object  (0) 2009.08.19
7. 배열  (0) 2009.08.19
6. valuetype 기본 형식  (0) 2009.08.19
5. .NET Framework  (0) 2009.08.19
4. const 와 readonly  (0) 2009.08.19