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

String.Format 메서드

 

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

String.Format 메서드를 처음 사용하는 경우 String.Format 메서드 시작 섹션에서 대략적인 내용을 살펴보세요.

모든 String.Format 오버로드에 대한 전체 설명서는 설명 섹션을 참조하세요.

네임스페이스:   System
어셈블리:  mscorlib.dll의 mscorlib

이름설명
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 메서드를 호출 하는 결과 문자열에 삽입 하기 전에 하나를 변환 합니다.

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

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);         

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

인덱스입니다.

문자열 표현의 되도록 인수의 인덱스 문자열의이 위치에 포함 합니다. 이 인수가 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 서식을 중재 하는 데 사용 되는 사용자 지정 및 문화권별 형식 정보를 제공 하는 구현을 처리 합니다.

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

오버 로드 중 하나를 호출할 수도 수는 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[]) 메서드를 여러 가지 서로 다른 culture를 사용 하 여 일부 날짜 및 시간 값 및 숫자 값의 문자열 표현을 표시 합니다.

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"는 결과 문자열에서 소수 자릿수를 정의 하는 전체 자릿수 지정자를 허용 합니다. 다음 예제에서는 표준 숫자 형식 문자열을 사용 하 여 결과 문자열에서 10 진수의 수를 제어 합니다.

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" 형식 지정자를 사용 하 여 다음 예제와 같이 결과 문자열에서 10 진수 숫자의 수를 제어 합니다.

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이 아닌 정수 계열 자릿수를 표시 합니다. 정수 형식을 지정 하는 경우 자릿수를 제어 하는 전체 자릿수 지정자 "D"와 "X" 표준 형식 문자열을 사용할 수 있습니다.

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);   
   }
}
맨 위로 이동
표시: