이 문서는 기계 번역을 이용하여 번역되었습니다. 문서를 영문으로 보려면 영문 확인란을 선택하세요. 마우스 포인터를 텍스트 위로 이동시켜 팝업 창에서 영문 텍스트를 표시할 수도 있습니다.
번역
영문

String.Format 메서드

 

지정된 형식에 따라 개체의 값을 문자열로 변환하여 다른 문자열에 삽입 합니다.

처음 사용 하는 경우는 String.Format 메서드를 참조는String.Format 메서드 시작 간략 한 개요 섹션.

참조는 주의 모두에 대 한 전체 설명서에 대 한 섹션 String.Format 오버 로드 합니다.

네임스페이스:   System
어셈블리:  mscorlib(mscorlib.dll에 있음)

이름설명
System_CAPS_pubmethodSystem_CAPS_staticFormat(IFormatProvider, String, Object)

지정된 문자열에 있는 하나의 형식 항목 또는 여러 개의 형식 항목을 해당하는 개체의 문자열 표현으로 바꿉니다. 매개 변수에서 문화권별 서식 지정 정보를 제공합니다.

System_CAPS_pubmethodSystem_CAPS_staticFormat(IFormatProvider, String, Object, Object)

지정된 문자열에 있는 서식 지정 항목을 지정된 두 개체의 문자열 표현으로 바꿉니다. 매개 변수에서 문화권별 서식 지정 정보를 제공합니다.

System_CAPS_pubmethodSystem_CAPS_staticFormat(IFormatProvider, String, Object, Object, Object)

지정된 문자열의 형식 항목을 지정된 세 개체의 문자열 표현으로 바꿉니다. 매개 변수에서 문화권별 형식 지정 정보를 제공합니다.

System_CAPS_pubmethodSystem_CAPS_staticFormat(IFormatProvider, String, Object[])

지정된 문자열의 형식 항목을 지정된 배열에 있는 해당 개체의 문자열 표현으로 바꿉니다. 매개 변수에서 문화권별 서식 지정 정보를 제공합니다.

System_CAPS_pubmethodSystem_CAPS_staticFormat(String, Object)

지정된 문자열에 있는 하나 이상의 형식 항목을 지정된 개체의 문자열 표현으로 바꿉니다.

System_CAPS_pubmethodSystem_CAPS_staticFormat(String, Object, Object)

지정된 문자열에 있는 서식 지정 항목을 지정된 두 개체의 문자열 표현으로 바꿉니다.

System_CAPS_pubmethodSystem_CAPS_staticFormat(String, Object, Object, Object)

지정된 문자열의 형식 항목을 지정된 세 개체의 문자열 표현으로 바꿉니다.

System_CAPS_pubmethodSystem_CAPS_staticFormat(String, Object[])

지정된 문자열의 형식 항목을 지정된 배열에 있는 해당 개체의 문자열 표현으로 바꿉니다.

사용 하 여 String.Format 다른 문자열에는 개체, 변수 또는 식의 값을 삽입 하는 경우. 예를 들어 값을 삽입할 수 있습니다는 Decimal 을 단일 문자열로 사용자에 게 표시 하는 문자열에는 값:

Decimal pricePerOunce = 17.36m;
String s = String.Format("The current price is {0} per ounce.",
                         pricePerOunce);
// Result: The current price is 17.36 per ounce.

및 해당 값의 서식을 제어할 수 있습니다.

Decimal pricePerOunce = 17.36m;
String s = String.Format("The current price is {0:C2} per ounce.",
                         pricePerOunce);
// Result if current culture is en-US:
//      The current price is $17.36 per ounce.

서식 지정 외에도 맞춤 및 간격을 제어할 수 있습니다.

삽입

String.Format형식 문자열 뒤에 하나 이상의 개체 또는 문자열로 변환 되며 형식 문자열에서 지정된 된 위치에 삽입 하는 식으로 시작 합니다. 예:

decimal temp = 20.4m;
string s = String.Format("The temperature is {0}°C.", temp);
Console.WriteLine(s);
// Displays 'The temperature is 20.4°C.'

{0} 형식에서 문자열은 형식 항목입니다. 0문자열 값을 해당 위치에 삽입할 개체의 인덱스가입니다. (인덱스 0부터 시작)입니다. 삽입 될 개체가 문자열이 아닌 경우 해당 ToString 메서드를 호출 하는 결과 문자열에 삽입 하기 전에 하나를 변환 합니다.

두 개의 형식 항목 및 개체 2 개를 사용 하 여 개체 목록에는 또 다른 예는 다음과 같습니다.

string s = String.Format("At {0}, the temperature is {1}°C.",
                         DateTime.Now, 20.4);
// Output similar to: 'At 4/10/2015 9:29:41 AM, the temperature is 20.4°C.'

형식 항목 수 만큼 있고 모든 서식 항목의 인덱스 개체 목록에서 일치 하는 개체의 개체와 개체 목록에서 원하는 합니다. 또한 필요가 없습니다 걱정할 오버 로드에 대 한 호출입니다. 컴파일러는 적절 한 수를 선택 합니다.

서식 지정 제어

개체의 서식 지정 하는 방법을 제어 하는 형식 문자열 형식 항목의 인덱스를 따를 수 있습니다. 예를 들어 {0:d} 개체 목록에서 첫 번째 개체 "d" 형식 문자열에 적용 됩니다. 다음은 단일 개체와 예제 하 고 두 항목의 서식을 지정 합니다.

string s = String.Format("It is now {0:d} at {0:t}", DateTime.Now);
// Output similar to: 'It is now 4/10/2015 at 10:04 AM'

형식 문자열, 모든 숫자 형식을 포함 한 다양 한 형식 지원 (둘 다 표준사용자 지정 형식 문자열), 모든 날짜 및 시간 (둘 다 표준사용자 지정 형식 문자열) 및 시간 간격 (둘 다 표준사용자 지정 형식 문자열), 모든 열거형 형식 열거형 형식, 및 GUIDs합니다. 또한 사용자 고유의 형식에 형식 문자열에 대 한 지원을 추가할 수 있습니다.

간격을 제어합니다.

와 같은 구문을 사용 하 여 결과 문자열에 삽입 되는 문자열의 너비를 정의할 수 있습니다 {0,12}, 문자열 12를 삽입 합니다. 이 경우 첫 번째 개체의 문자열 표현을 12 자 필드에 오른쪽 맞춤를입니다. (첫 번째 개체의 문자열 표현을 길이 12 자 이면 그러나 기본 필드 너비는 무시 됩니다 및 전체 문자열이 결과 문자열에 삽입 됩니다.)

다음 예제에서는 정의 문자열을 보관할 6 자 필드 "Year" 및 일부 연도 문자열으로 15 자 필드는 문자열을 보관할 "채우기"와 일부 인구 데이터입니다. 문자는 오른쪽 정렬 필드에 note 합니다.

int[] years = { 2013, 2014, 2015 };
int[] population = { 1025632, 1105967, 1148203 };
String s = String.Format("{0,6} {1,15}\n\n", "Year", "Population");
for(int index = 0; index < years.Length; index++)
   s += String.Format("{0,6} {1,15:N0}\n",
                      years[index], population[index]);
// Result:
//      Year      Population
//
//      2013       1,025,632
//      2014       1,105,967
//      2015       1,148,203
맞춤을 제어합니다.

기본적으로 문자열은 해당 필드 내에서 오른쪽 정렬 필드 너비를 지정 하는 경우입니다. 문자열 필드에서를 왼쪽에 맞추려면 앞에 음수 기호를 사용 하 여 필드 너비와 같은 {0,-12} 12 자로 오른쪽 정렬 필드를 정의 합니다.

다음 예제에서는 왼쪽 맞춤 레이블과 데이터 한다는 점을 제외 하면 이전 쿼리와 비슷합니다.

int[] years = { 2013, 2014, 2015 };
int[] population = { 1025632, 1105967, 1148203 };
String s = String.Format("{0,-10} {1,-10}\n\n", "Year", "Population");
for(int index = 0; index < years.Length; index++)
   s += String.Format("{0,-10} {1,-10:N0}\n",
                      years[index], population[index]);
// Result:
//    Year       Population
//
//    2013       1,025,632
//    2014       1,105,967
//    2015       1,148,203

String.Format에서는 합성 서식 지정 기능을 활용합니다. 자세한 내용은 복합 형식 지정을 참조하십시오.

오버 로드를 선택 하는 방법 추가 지침을 참조 하세요. 방법을 호출 수행 합니까?

String String.Format(String format, Object arg0)

지정된 된 개체의 문자열 표현으로 서식 지정 항목을 바꿉니다 (예제).

String String.Format(String format, Object arg0, Object arg1)

지정 된 두 개체의 문자열 표현으로 서식 지정 항목을 바꿉니다 (예제).

String String.Format(String format, Object arg0, Object arg1, Object arg2)

지정 된 세 개체의 문자열 표현으로 서식 지정 항목을 바꿉니다 (예제).

String String.Format(String format, params Object[] args)

지정된 된 배열에 있는 해당 개체의 문자열 표현으로 서식 지정 항목을 바꿉니다 (예제).

String String.Format(IFormatProvider provider, String format, params Object[] args)

지정된 된 배열에 있는 해당 개체의 문자열 표현으로 서식 지정 항목이 대체 하 고 지정 된 문화권별 서식 지정 정보를 사용 하 여 (예제) 또는 사용자 지정 형식 지정 정보 (예제).

이것은 전체 목록은 대 한 매개 변수는 Format 방법으로, 각 오버 로드에서 사용 하는 매개 변수에 대 한 위의 오버 로드 구문 참조 하십시오.format 모든 오버 로드를 통해 매개 변수를 사용 합니다.

매개 변수

유형

설명

format

String

하나 이상의 형식 항목을 포함 하는 합성 형식 문자열 (참조 서식 항목).

arg0

String

첫 페이지 또는 서식을 지정할 개체입니다.

arg1

String

서식을 지정할 두 번째 개체입니다.

arg2

String

서식을 지정할 세 번째 개체입니다.

args

String[]

0 개 이상의 개체에 서식을 지정 하려면 쉼표로 구분 된 목록 또는 배열로 제공 합니다.

provider

IFormatProvider

사용자 지정 또는 culture 별 서식 지정 정보를 제공 하는 개체입니다.

형식: String
의 복사본을 format 에서 해당 인수의 문자열 표현으로는 형식 항목이 대체 되었습니다.

예외

조건

throw

ArgumentNullException

formatnull인 경우

모든 오버 로드 합니다.

FormatException

format이 잘못되었습니다.

또는

형식 항목의 인덱스 보다 작거나 0 또는 보다 큰 인수 목록에서 인수 수와 같습니다.

모든 오버 로드 합니다.

호출

현재 문화권의 규칙을 사용 하 여 하나 이상의 개체를 포맷 합니다.

포함 하는 오버 로드를 제외 하 고는 provider 매개 변수를 나머지Format 오버 로드는 포함는 String 매개 변수 뒤에 하나 이상의 개체 매개 변수입니다. 이 인해 않아도 결정할 Format 호출 하려는 오버 로드 합니다. 언어 컴파일러에서는 적합 한 오버 헤드로 없는 오버 로드 중에서 선택 된 provider 매개 변수를 인수 목록에 따라 합니다. 예를 들어 인수 목록에 다섯 개의 인수, 컴파일러는 호출 된 Format(String, Object[]) 메서드.

특정 문화권의 규칙을 사용 하 여 하나 이상의 개체를 포맷 합니다.

Format로 시작 하는 오버 로드는 provider 매개 변수 뒤에 String 매개 변수 또는 하나 이상의 매개 변수 개체입니다. 이 인해 않아도 어떤 결정을 Format 호출 하려는 오버 로드 합니다. 언어 컴파일러에서 오버 로드 중에서 적절 한 오버 로드를 선택 합니다는 provider 매개 변수를 인수 목록에 기반 합니다. 예를 들어 인수 목록에 다섯 개의 인수, 컴파일러는 호출 된 Format(IFormatProvider, String, Object[]) 메서드.

사용 하 여 사용자 지정 서식 지정 작업을 수행는 ICustomFormatter 구현 또는 IFormattable 구현 합니다.

4 개의 오버 로드 중 하나는 provider 매개 변수입니다. 컴파일러는 오버 로드 중에서 적절 한 오버 로드를 선택는 provider 매개 변수를 인수 목록에 기반 합니다.

각 오버 로드는 Format 메서드는 합성 서식 지정 기능 합성 형식 문자열에서 서식 항목 이라고는 0부터 시작 인덱싱된 자리 표시자를 포함 하도록 합니다. 런타임 시 각 형식 항목이 매개 변수 목록에서 해당 인수의 문자열 표현으로 바뀝니다. 인수의 값이 null, 형식 항목으로 대체 되 String.Empty합니다. 다음을 호출 하는 예를 들어는 Format(String, Object, Object, Object) 메서드에 세 개의 형식 항목와 {0}, {1 \}, {2 \}, 하는 형식 문자열과 세 개 항목으로 인수 목록에 포함 되어 있습니다.

DateTime dat = new DateTime(2012, 1, 17, 9, 30, 0); 
string city = "Chicago";
int temp = -16;
string output = String.Format("At {0} in {1}, the temperature was {2} degrees.",
                              dat, city, temp);
Console.WriteLine(output);
// The example displays the following output:
//    At 1/17/2012 9:30:00 AM in Chicago, the temperature was -16 degrees.   

서식 항목이이 구문은 다음과 같습니다.


{
index[,alignment][ :formatString] }

대괄호는 선택적 요소를 나타냅니다. 여는 태그와 닫는 중괄호는 필요 합니다. (리터럴 여 포함 하거나의 "중괄호를 이스케이프 처리" 섹션을 참조 닫는 중괄호 형식 문자열에는 복합 형식 지정 문서입니다.)

예를 들어 다음과 같은 서식 항목 수를 통화 값 형식으로 나타납니다.

String.Format("{0,-10:C}", 126347.89m);         

형식 항목에는 다음과 같은 요소가 있습니다.

인덱스입니다.

문자열 표현의 되도록 형식이 인수의 0부터 시작 인덱스는 문자열의이 위치에 포함 합니다. 이 인수가 null, 문자열에서이 위치에 빈 문자열이 포함 됩니다.

맞춤

선택 사항입니다. 인수를 삽입 하는 지, 오른쪽 맞춤 (양의 정수) 왼쪽 맞춤 (음의 정수)에 필드의 총 길이 나타내는 부호 있는 정수입니다. 생략 하면 맞춤, 선행 또는 후행 공백 없이 필드에 해당 인수의 문자열 표현을 삽입 됩니다.

하는 경우의 값 맞춤 을 삽입할 수는 인수의 길이 보다 작으면 맞춤 무시 됩니다 및 인수의 문자열 표현의 길이가 필드 너비로 사용 됩니다.

formatString

선택적 요소. 해당 인수가 결과 문자열의 형식을 지정 하는 문자열입니다. 생략 하면 formatString, 해당 인수의 매개 변수가 없는 ToString 메서드는 문자열 표현이 있습니다. 지정 하는 경우 formatString, 형식 항목으로 참조 하는 인수를 구현 해야 합니다는 IFormattable 인터페이스입니다. 형식 문자열을 지 원하는 유형은 다음과 같습니다.

그러나 모든 사용자 지정 형식 구현할 수를 메모 IFormattable 기존 형식을 확장할 또는 IFormattable 구현 합니다.

다음 예제에서는 alignmentformatString 인수 형식이 지정 된 출력을 생성 합니다.

using System;

public class Example
{
   public static void Main()
   {
      // Create array of 5-tuples with population data for three U.S. cities, 1940-1950.
      Tuple<string, DateTime, int, DateTime, int>[] cities = 
          { Tuple.Create("Los Angeles", new DateTime(1940, 1, 1), 1504277, 
                         new DateTime(1950, 1, 1), 1970358),
            Tuple.Create("New York", new DateTime(1940, 1, 1), 7454995, 
                         new DateTime(1950, 1, 1), 7891957),  
            Tuple.Create("Chicago", new DateTime(1940, 1, 1), 3396808, 
                         new DateTime(1950, 1, 1), 3620962),  
            Tuple.Create("Detroit", new DateTime(1940, 1, 1), 1623452, 
                         new DateTime(1950, 1, 1), 1849568) };

      // Display header
      string header = String.Format("{0,-12}{1,8}{2,12}{1,8}{2,12}{3,14}\n",
                                    "City", "Year", "Population", "Change (%)");
      Console.WriteLine(header);
      string output;      
      foreach (var city in cities) {
         output = String.Format("{0,-12}{1,8:yyyy}{2,12:N0}{3,8:yyyy}{4,12:N0}{5,14:P1}",
                                city.Item1, city.Item2, city.Item3, city.Item4, city.Item5,
                                (city.Item5 - city.Item3)/ (double)city.Item3);
         Console.WriteLine(output);
      }
   }
}
// The example displays the following output:
//    City            Year  Population    Year  Population    Change (%)
//    
//    Los Angeles     1940   1,504,277    1950   1,970,358        31.0 %
//    New York        1940   7,454,995    1950   7,891,957         5.9 %
//    Chicago         1940   3,396,808    1950   3,620,962         6.6 %
//    Detroit         1940   1,623,452    1950   1,849,568        13.9 %

서식 항목이 문자열의 시작 부분에서 순차적으로 처리 됩니다. 각 형식 항목에는 메서드의 인수 목록에 있는 개체에 해당 하는 인덱스입니다. Format 메서드 인수를 검색 하 고 해당 문자열 표현에 다음과 같이 파생 됩니다.

예에 대 한 호출을 가로채는 ICustomFormatter.Format 메서드 정보를 볼 수 있습니다 및는 Format 합성 형식 문자열의 각 형식 항목에 대 한 서식 지정 메서드에 메서드가 전달 참조 예 7: 절편 공급자 및 로마 숫자 포맷터합니다.

Format 메서드가 throw 한 FormatException 경우 인수 목록에는 수의 인수 보다 크거나 인덱스 항목의 인덱스는 예외입니다. 그러나 format 같은 인덱스를 보유 하는 여러 개의 형식 항목이 인수 보다 더 많은 형식 항목을 포함할 수 있습니다. 에 대 한 호출에는 Format(String, Object) 다음 예제에서는 인수 목록에에서는 메서드는 단일 인수를 형식 문자열에는 두 개의 형식 항목이 포함 되어 있지만: 숫자의 10 진수 값을 16 진수 값을 표시, 다른 하나입니다.

public class Example
{
   public static void Main()
   {
      short[] values= { Int16.MinValue, -27, 0, 1042, Int16.MaxValue };
      Console.WriteLine("{0,10}  {1,10}\n", "Decimal", "Hex");
      foreach (short value in values)
      {
         string formatString = String.Format("{0,10:G}: {0,10:X}", value);
         Console.WriteLine(formatString);
      }   
   }
}
// The example displays the following output:
//       Decimal         Hex
//    
//        -32768:       8000
//           -27:       FFE5
//             0:          0
//          1042:        412
//         32767:       7FFF

일반적으로 인수 목록에는 개체에서 반환 되는 현재 문화권의 규칙을 사용 하 여 해당 문자열 표현으로 변환 됩니다는 CultureInfo.CurrentCulture 속성입니다. 오버 로드 중 하나를 호출 하 여이 동작을 제어할 수 Format 포함 하는 provider 매개 변수입니다. provider 매개 변수는 한 IFormatProvider 서식을 중재 하는 데 사용 되는 사용자 지정 및 culture 별 서식 지정 정보를 제공 하는 구현 처리 합니다.

IFormatProvider 인터페이스에는 단일 멤버 GetFormat, 하는 서식 지정 정보를 제공 하는 개체를 반환 합니다. .NET Framework에는 3 개의 IFormatProvider culture 별 서식 지정을 제공 하는 구현:

오버 로드 중 하나를 호출할 수도 수는 Format 메서드에 provider 매개 변수 Format(IFormatProvider, String, Object[]) 사용자 지정 서식 지정 작업을 수행 하는 오버 로드 합니다. 예를 들어 전화 번호 또는 id 번호도 정수 서식을 지정할 수 있습니다. 사용자 지정 형식 지정을 수행 하 여 provider 인수 둘 다 구현 해야 합니다는 IFormatProviderICustomFormatter 인터페이스입니다. 경우는Format 메서드에 전달 됩니다는 ICustomFormatter 구현으로는 provider 인수를는 Format 메서드 호출의 IFormatProvider.GetFormat 구현 형식의 개체를 요청 하 고 ICustomFormatter합니다. 그런 다음 반환 된 호출 ICustomFormatter 개체의 Format 복합 문자열의 각 형식 항목의 형식을 지정 메서드를 전달 합니다.

사용자 지정 형식 지정 솔루션을 제공 하는 방법에 대 한 자세한 내용은 참조 방법: 사용자 지정 숫자 형식 공급자 정의 및 사용ICustomFormatter합니다. 서식이 지정 된 사용자 지정 번호에 정수를 변환 하는 예제를 보려면 예 6: 사용자 지정 서식 지정 작업합니다. 부호 없는 바이트 로마 숫자 변환 하는 예제를 보려면 예 7: 절편 공급자 및 로마 숫자 포맷터합니다.

다음 예제에서는 Format(String, Object) 메서드 문자열에 특정 사용자의 나이 포함 합니다.

using System;

[assembly: CLSCompliant(true)]
public class Example
{
   public static void Main()
   {
      DateTime birthdate = new DateTime(1993, 7, 28);
      DateTime[] dates = { new DateTime(1993, 8, 16), 
                           new DateTime(1994, 7, 28), 
                           new DateTime(2000, 10, 16), 
                           new DateTime(2003, 7, 27), 
                           new DateTime(2007, 5, 27) };

      foreach (DateTime dateValue in dates)
      {
         TimeSpan interval = dateValue - birthdate;
         // Get the approximate number of years, without accounting for leap years.
         int years = ((int) interval.TotalDays) / 365;
         // See if adding the number of years exceeds dateValue.
         string output;
         if (birthdate.AddYears(years) <= dateValue) {
            output = String.Format("You are now {0} years old.", years);
            Console.WriteLine(output);
         }   
         else {
            output = String.Format("You are now {0} years old.", years - 1);
            Console.WriteLine(output);
         }      
      }
   }
}
// The example displays the following output:
//       You are now 0 years old.
//       You are now 1 years old.
//       You are now 7 years old.
//       You are now 9 years old.
//       You are now 13 years old.

사용 하 여이 예제는 Format(String, Object, Object) 제네릭에 저장 된 시간 및 온도 데이터를 표시 하는 메서드 Dictionary<TKey, TValue> 개체입니다. 형식 문자열의 서식을 지정 하려면 두 개체는 있지만 세 개의 형식 항목에 있는지 확인 합니다. 가 두 형식 (날짜 및 시간 값) 목록에서 첫 번째 개체를 사용 하기 때문에 이것이: 첫 번째 형식 항목 표시 되는 경우 시간 및 두 번째 날짜를 표시 합니다.

using System;
using System.Collections.Generic;

public class Example
{
   public static void Main()
   {
      Dictionary<DateTime, Double> temperatureInfo = new Dictionary<DateTime, Double>(); 
      temperatureInfo.Add(new DateTime(2010, 6, 1, 14, 0, 0), 87.46);
      temperatureInfo.Add(new DateTime(2010, 12, 1, 10, 0, 0), 36.81);

      Console.WriteLine("Temperature Information:\n");
      string output;   
      foreach (var item in temperatureInfo)
      {
         output = String.Format("Temperature at {0,8:t} on {0,9:d}: {1,5:N1}°F", 
                                item.Key, item.Value);
         Console.WriteLine(output);
      }
   }
}
// The example displays the following output:
//       Temperature Information:
//       
//       Temperature at  2:00 PM on  6/1/2010:  87.5°F
//       Temperature at 10:00 AM on 12/1/2010:  36.8°F

사용 하 여이 예제는 Format(String, Object, Object, Object) 부울 결과 나타내는 문자열을 만들려면 메서드 And 두 정수 값으로 작업 합니다. 각 항목의 형식이 두 가지 방법으로 하기 때문에 형식 문자열에 6 개의 형식 항목을 포함 되지만 메서드가 매개 변수 목록에 대 한 세 개의 항목을 note 합니다.

using System;

public class Example
{
   public static void Main()
   {
      string formatString = "    {0,10} ({0,8:X8})\n" + 
                            "And {1,10} ({1,8:X8})\n" + 
                            "  = {2,10} ({2,8:X8})";
      int value1 = 16932;
      int value2 = 15421;
      string result = String.Format(formatString, 
                                    value1, value2, value1 & value2);
      Console.WriteLine(result);
   }
}
// The example displays the following output:
//                16932 (00004224)
//       And      15421 (00003C3D)
//         =         36 (00000024)

이 예제에서는 특정 날짜의 최고 / 최저 온도에 대 한 데이터를 포함 하는 문자열을 만듭니다. 합성 형식 문자열에는 C# 예제에서 다섯 개의 형식 항목 및 Visual Basic 예의 경우 6 개 있습니다. 해당 값의 문자열 표현을 너비를 정의 하는 두 개의 형식 항목의 상태와 첫 번째 형식 항목인 아울러 표준 날짜 및 시간 서식 문자열입니다.

using System;

public class Example
{
   public static void Main()
   {
      DateTime date1 = new DateTime(2009, 7, 1);
      TimeSpan hiTime = new TimeSpan(14, 17, 32);
      decimal hiTemp = 62.1m; 
      TimeSpan loTime = new TimeSpan(3, 16, 10);
      decimal loTemp = 54.8m; 

      string result1 = String.Format("Temperature on {0:d}:\n{1,11}: {2} degrees (hi)\n{3,11}: {4} degrees (lo)", 
                                     date1, hiTime, hiTemp, loTime, loTemp);
      Console.WriteLine(result1);
      Console.WriteLine();

      string result2 = String.Format("Temperature on {0:d}:\n{1,11}: {2} degrees (hi)\n{3,11}: {4} degrees (lo)", 
                                     new object[] { date1, hiTime, hiTemp, loTime, loTemp });
      Console.WriteLine(result2);
   }
}
// The example displays the following output:
//       Temperature on 7/1/2009:
//          14:17:32: 62.1 degrees (hi)
//          03:16:10: 54.8 degrees (lo)
//       Temperature on 7/1/2009:
//          14:17:32: 62.1 degrees (hi)
//          03:16:10: 54.8 degrees (lo)

배열 형식을 개체를 전달할 수도 있습니다는 인수 목록입니다.

using System;

public class CityInfo
{
   public CityInfo(String name, int population, Decimal area, int year)
   {
      this.Name = name;
      this.Population = population;
      this.Area = area;
      this.Year = year;
   }

   public readonly String Name; 
   public readonly int Population;
   public readonly Decimal Area;
   public readonly int Year;
}

public class Example
{
   public static void Main()
   {
      CityInfo nyc2010 = new CityInfo("New York", 8175133, 302.64m, 2010);
      ShowPopulationData(nyc2010);
      CityInfo sea2010 = new CityInfo("Seattle", 608660, 83.94m, 2010);      
      ShowPopulationData(sea2010); 
   }

   private static void ShowPopulationData(CityInfo city)
   {
      object[] args = { city.Name, city.Year, city.Population, city.Area };
      String result = String.Format("{0} in {1}: Population {2:N0}, Area {3:N1} sq. feet", 
                                    args);
      Console.WriteLine(result); 
   }
}
// The example displays the following output:
//       New York in 2010: Population 8,175,133, Area 302.6 sq. feet
//       Seattle in 2010: Population 608,660, Area 83.9 sq. feet

사용 하 여이 예제는 Format(IFormatProvider, String, Object[]) 메서드를 여러 가지 서로 다른 문화권을 사용 하 여 일부 날짜 및 시간 값 및 숫자 값의 문자열 표현을 표시 합니다.

using System;
using System.Globalization;

public class Example
{
   public static void Main()
   {
      string[] cultureNames = { "en-US", "fr-FR", "de-DE", "es-ES" };

      DateTime dateToDisplay = new DateTime(2009, 9, 1, 18, 32, 0);
      double value = 9164.32;

      Console.WriteLine("Culture     Date                                Value\n");
      foreach (string cultureName in cultureNames)
      {
         CultureInfo culture = new CultureInfo(cultureName);
         string output = String.Format(culture, "{0,-11} {1,-35:D} {2:N}", 
                                       culture.Name, dateToDisplay, value);
         Console.WriteLine(output);
      }    
   }
}
// The example displays the following output:
//    Culture     Date                                Value
//    
//    en-US       Tuesday, September 01, 2009         9,164.32
//    fr-FR       mardi 1 septembre 2009              9 164,32
//    de-DE       Dienstag, 1. September 2009         9.164,32
//    es-ES       martes, 01 de septiembre de 2009    9.164,32

이 예제에서는 양식 x-xxxxx-xx에서 고객 계정 번호도 정수 값의 형식을 지정 하는 형식 공급자를 정의 합니다.

using System;

public class TestFormatter
{
   public static void Main()
   {
      int acctNumber = 79203159;
      Console.WriteLine(String.Format(new CustomerFormatter(), "{0}", acctNumber));
      Console.WriteLine(String.Format(new CustomerFormatter(), "{0:G}", acctNumber));
      Console.WriteLine(String.Format(new CustomerFormatter(), "{0:S}", acctNumber));
      Console.WriteLine(String.Format(new CustomerFormatter(), "{0:P}", acctNumber));
      try {
         Console.WriteLine(String.Format(new CustomerFormatter(), "{0:X}", acctNumber));
      }
      catch (FormatException e) {
         Console.WriteLine(e.Message);
      }
   }
}

public class CustomerFormatter : IFormatProvider, ICustomFormatter
{
   public object GetFormat(Type formatType) 
   {
      if (formatType == typeof(ICustomFormatter))        
         return this; 
      else
         return null;
   }

   public string Format(string format, 
	                     object arg, 
	                     IFormatProvider formatProvider) 
   {                       
      if (! this.Equals(formatProvider))
      {
         return null;
      }
      else
      {
         if (String.IsNullOrEmpty(format)) 
            format = "G";

         string customerString = arg.ToString();
         if (customerString.Length < 8)
            customerString = customerString.PadLeft(8, '0');

         format = format.ToUpper();
         switch (format)
         {
            case "G":
               return customerString.Substring(0, 1) + "-" +
                                     customerString.Substring(1, 5) + "-" +
                                     customerString.Substring(6);
            case "S":                          
               return customerString.Substring(0, 1) + "/" +
                                     customerString.Substring(1, 5) + "/" +
                                     customerString.Substring(6);
            case "P":                          
               return customerString.Substring(0, 1) + "." +
                                     customerString.Substring(1, 5) + "." +
                                     customerString.Substring(6);
            default:
               throw new FormatException( 
                         String.Format("The '{0}' format specifier is not supported.", format));
         }
      }   
   }
}
// The example displays the following output:
//       7-92031-59
//       7-92031-59
//       7/92031/59
//       7.92031.59
//       The 'X' format specifier is not supported.

구현 하는 사용자 지정 형식 공급자를 정의 하는이 예제는 ICustomFormatterIFormatProvider 다음 두 가지 작업을 수행 하는 인터페이스:

  • 에 전달 된 매개 변수 표시는 ICustomFormatter.Format 구현 합니다. 이렇게 하면를 매개 변수를 볼 수는 Format(IFormatProvider, String, Object[]) 메서드가 서식을 시도 하는 각 개체에 대 한 사용자 지정 서식 구현에 전달 합니다. 응용 프로그램을 디버깅할 때 유용할 수 있습니다.

  • 형식을 지정할 개체는 "R" 표준 형식 문자열을 사용 하 여 형식을 지정할 수 있는 부호 없는 바이트 값 이면 사용자 지정 포맷터 형식을 로마 숫자도 숫자 값을 지정 합니다.

using System;
using System.Globalization;

public class InterceptProvider : IFormatProvider, ICustomFormatter
{
   public object GetFormat(Type formatType)
   {
      if (formatType == typeof(ICustomFormatter))
         return this;
      else
         return null;
   }

   public string Format(String format, Object obj, IFormatProvider provider) 
   {
      // Display information about method call.
      string formatString = format ?? "<null>";
      Console.WriteLine("Provider: {0}, Object: {1}, Format String: {2}",
                        provider, obj ?? "<null>", formatString);

      if (obj == null) return String.Empty;

      // If this is a byte and the "R" format string, format it with Roman numerals.
      if (obj is Byte && formatString.ToUpper().Equals("R")) {
         Byte value = (Byte) obj;
         int remainder;
         int result;
         String returnString = String.Empty;

         // Get the hundreds digit(s)
         result = Math.DivRem(value, 100, out remainder);
         if (result > 0)  
            returnString = new String('C', result);
         value = (Byte) remainder;
         // Get the 50s digit
         result = Math.DivRem(value, 50, out remainder);
         if (result == 1)
            returnString += "L";
         value = (Byte) remainder;
         // Get the tens digit.
         result = Math.DivRem(value, 10, out remainder);
         if (result > 0)
            returnString += new String('X', result);
         value = (Byte) remainder; 
         // Get the fives digit.
         result = Math.DivRem(value, 5, out remainder);
         if (result > 0)
            returnString += "V";
         value = (Byte) remainder;
         // Add the ones digit.
         if (remainder > 0) 
            returnString += new String('I', remainder);

         // Check whether we have too many X characters.
         int pos = returnString.IndexOf("XXXX");
         if (pos >= 0) {
            int xPos = returnString.IndexOf("L"); 
            if (xPos >= 0 & xPos == pos - 1)
               returnString = returnString.Replace("LXXXX", "XC");
            else
               returnString = returnString.Replace("XXXX", "XL");   
         }
         // Check whether we have too many I characters
         pos = returnString.IndexOf("IIII");
         if (pos >= 0)
            if (returnString.IndexOf("V") >= 0)
               returnString = returnString.Replace("VIIII", "IX");
            else
               returnString = returnString.Replace("IIII", "IV");    

         return returnString; 
      }   

      // Use default for all other formatting.
      if (obj is IFormattable)
         return ((IFormattable) obj).ToString(format, CultureInfo.CurrentCulture);
      else
         return obj.ToString();
   }
}

public class Example
{
   public static void Main()
   {
      int n = 10;
      double value = 16.935;
      DateTime day = DateTime.Now;
      InterceptProvider provider = new InterceptProvider();
      Console.WriteLine(String.Format(provider, "{0:N0}: {1:C2} on {2:d}\n", n, value, day));
      Console.WriteLine(String.Format(provider, "{0}: {1:F}\n", "Today: ", 
                                      (DayOfWeek) DateTime.Now.DayOfWeek));
      Console.WriteLine(String.Format(provider, "{0:X}, {1}, {2}\n", 
                                      (Byte) 2, (Byte) 12, (Byte) 199));
      Console.WriteLine(String.Format(provider, "{0:R}, {1:R}, {2:R}\n", 
                                      (Byte) 2, (Byte) 12, (Byte) 199));
   }
}
// The example displays the following output:
//    Provider: InterceptProvider, Object: 10, Format String: N0
//    Provider: InterceptProvider, Object: 16.935, Format String: C2
//    Provider: InterceptProvider, Object: 1/31/2013 6:10:28 PM, Format String: d
//    10: $16.94 on 1/31/2013
//    
//    Provider: InterceptProvider, Object: Today: , Format String: <null>
//    Provider: InterceptProvider, Object: Thursday, Format String: F
//    Today: : Thursday
//    
//    Provider: InterceptProvider, Object: 2, Format String: X
//    Provider: InterceptProvider, Object: 12, Format String: <null>
//    Provider: InterceptProvider, Object: 199, Format String: <null>
//    2, 12, 199
//    
//    Provider: InterceptProvider, Object: 2, Format String: R
//    Provider: InterceptProvider, Object: 12, Format String: R
//    Provider: InterceptProvider, Object: 199, Format String: R
//    II, XII, CXCIX

.NET Framework

모든 오버 로드에서 지원 됩니다: 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

모든 오버 로드에서 지원 됩니다: 4, 3.5 SP1

이식 가능한 클래스 라이브러리

Format(String, Object[])Format(IFormatProvider, String, Object[]) 지원 됩니다

Windows 스토어 앱용 .NET

Format(String, Object[])Format(IFormatProvider, String, Object[]) Windows 8에서는 지원

형식 항목의 일반 구문은 다음과 같습니다.

{index[,alignment][: formatString]}

여기서 맞춤 필드 너비를 정의 하는 부호 있는 정수입니다. 이 값이 음수 이면 필드의 텍스트가 왼쪽 맞춤입니다. 양수 이면 텍스트가 오른쪽 맞춤 됩니다.

모든 표준 숫자 형식 문자열 (정수만 사용 됨)입니다 "D", "G", "R", except 및 "X"는 결과 문자열의 소수 자릿수를 정의 하는 전체 자릿수 지정자를 허용 합니다. 다음 예제에서는 표준 숫자 형식 문자열을 사용 하 여 결과 문자열의 소수 자릿수의 수를 제어 합니다.

using System;

public class Example
{
   public static void Main()
   {
      object[] values = { 1603, 1794.68235, 15436.14 };
      string result;
      foreach (var value in values) {
         result = String.Format("{0,12:C2}   {0,12:E3}   {0,12:F4}   {0,12:N3}  {1,12:P2}\n",
                                Convert.ToDouble(value), Convert.ToDouble(value) / 10000);
         Console.WriteLine(result);
      }                           
   }
}
// The example displays the following output:
//       $1,603.00     1.603E+003      1603.0000      1,603.000       16.03 %
//    
//       $1,794.68     1.795E+003      1794.6824      1,794.682       17.95 %
//    
//      $15,436.14     1.544E+004     15436.1400     15,436.140      154.36 %

사용 중인 경우는 사용자 지정 숫자 형식 문자열, "0" 형식 지정자를 사용 하 여 다음 예제와 같이 결과 문자열의 소수 자릿수 수를 제어 합니다.

using System;

public class Example
{
   public static void Main()
   {
      decimal value = 16309.5436m;
      string result = String.Format("{0,12:#.00000} {0,12:0,000.00} {0,12:000.00#}", 
                                    value);
      Console.WriteLine(result);
   }
}
// The example displays the following output:
//        16309.54360    16,309.54    16309.544

기본적으로 형식 지정 작업만 0이 아닌 정수 자릿수를 표시 합니다. 정수 형식을 지정 하는 경우 숫자의 수를 제어 하려면 "X" 표준 형식 문자열 "D"와 전체 자릿수 지정자를 사용할 수 있습니다.

using System;

public class Example
{
   public static void Main()
   {
      int value = 1326;
      string result = String.Format("{0,10:D6} {0,10:X8}", value);
      Console.WriteLine(result);
   }
}
// The example displays the following output:
//     001326   0000052E

"0"을 사용 하 여 지정된 하는 정수 개수의 함께 결과 문자열을 생성 하는 정수 또는 부동 소수점 숫자 앞에 오는 0을 채울 수 있습니다 사용자 지정 숫자 서식 지정자다음 예제와 같이 합니다.

using System;

public class Example
{
   public static void Main()
   {
      int value = 16342;
      string result = String.Format("{0,18:00000000} {0,18:00000000.000} {0,18:000,0000,000.0}", 
                                    value);
      Console.WriteLine(result);
   }
}
// The example displays the following output:
//           00016342       00016342.000    0,000,016,342.0

실용적인 제한은 없습니다. 두 번째 매개 변수는 Format(IFormatProvider, String, Object[]) 메서드는 태그로 지정는 ParamArrayAttribute 특성 구분 된 목록 또는 형식 목록으로 개체 배열을 포함할 수 있습니다.

예를 들어 영향을 최소화 하는 다음 메서드 호출에서 throw 한 FormatException 예외?

result = String.Format("The text has {0} '{' characters and {1} '}' characters.",
                       nOpen, nClose);

여는 중괄호와 닫는 중괄호의 단일는 항상 시작 또는 형식 항목의 끝으로 해석 됩니다. 문자 그대로 해석 되도록 이스케이프 해야 합니다. 다른 중괄호를 추가 하 여는 중괄호를 이스케이프 ("{{" 및 "}}" 대신 "{" 및 "}")와 같이, 다음과 같은 메서드 호출:

result = String.Format("The text has {0} '{{' characters and {1} '}}' characters.",
                       nOpen, nClose);

그러나 이스케이프 된 중괄호는 쉽게 잘못 해석 된 합니다. 형식 목록의 중괄호 포함 형식 항목을 사용 하 여 다음 예제와 같이 결과 문자열에 삽입 하는 것이 좋습니다.

result = String.Format("The text has {0} '{1}' characters and {2} '{3}' characters.",
                       nOpen, "{", nClose, "}");

예외의 가지 가장 일반적인 원인은 형식 항목의 인덱스는 개체 형식 목록에서에 해당 하지 않습니다. 일반적으로 형식 항목의 인덱스가 misnumbered 했습니다 또는 형식 목록에서 개체를 포함 하려면 잊었으며 나타냅니다. 경우에 따라 예외가 오타가; 결과 일반적인 실수는 잘못 입력 하는 되는 예를 들어 "[" (왼쪽된 대괄호) 대신 "{" (왼쪽된 중괄호)입니다.

예를 들어 다음 코드 throw 한 FormatException 예외:

using System;
using System.Collections.Generic;

public class Example
{
   public static void Main()
   {
      Random rnd = new Random();
      int[]  numbers = new int[4];
      int total = 0;
      for (int ctr = 0; ctr <= 2; ctr++) {
         int number = rnd.Next(1001);
         numbers[ctr] = number;
         total += number;
      }   
      numbers[3] = total;
      Console.WriteLine("{0} + {1} + {2} = {3}", numbers);   
   }
}

컴파일러가 오버 로드 확인의 문제입니다. 호출 하므로 단일 인수로 정수 배열로 처리 컴파일러 정수의 배열 개체 배열을 변환할 수 없습니다는 Format(String, Object) 메서드. 4 개의 형식 항목이 있지만 형식 목록에서 항목을 단일 있기 때문에 예외가 throw 됩니다.

호출 하기 전에 사용자가 직접 변환을 수행 해야 하는 Visual Basic 또는 C# 아닙니다 개체 배열에 정수 배열로 변환할 수는 Format(String, Object[]) 메서드. 다음 예제에는 하나의 구현을 제공합니다.

using System;
using System.Collections.Generic;

public class Example
{
   public static void Main()
   {
      Random rnd = new Random();
      int[]  numbers = new int[4];
      int total = 0;
      for (int ctr = 0; ctr <= 2; ctr++) {
         int number = rnd.Next(1001);
         numbers[ctr] = number;
         total += number;
      }   
      numbers[3] = total;
      object[] values = new object[numbers.Length];
      numbers.CopyTo(values, 0);
      Console.WriteLine("{0} + {1} + {2} = {3}", values);   
   }
}
맨 위로 이동
표시: